簡體   English   中英

為什么 nunit 不運行包含控制/特殊字符的測試

[英]Why does nunit not run a test which contains control/special chars

如果我有一個測試 class 之類的

public class Tests
{
    [TestCaseSource(nameof(TestSource))]
    public void Test(string c)
    {
        Assert.Pass();
    }

    public static IEnumerable<object> TestSource()
    {
        for (char c = '\0'; c < 255; c++)
        {
            yield return c.ToString();
        }
    }
}

然后 Visual Studio 中的測試運行程序可以發現所有測試,但不會運行所有測試。

這些是未運行的 ascii 字符范圍:

U_0001 - U_0006
U_000E - U_001F
U_007F - U_0084
U_0086 - U_009F

我們目前使用其中一些字符,例如U_0002進行網絡工作相關測試,這些字符包含在測試中,但目前不運行

這是用於測試運行的 output

---------- Starting test discovery for requested test run ----------
NUnit Adapter 3.17.0.0: Test discovery starting
NUnit Adapter 3.17.0.0: Test discovery complete
========== Test discovery finished: 255 Tests found in 4,8 sec ==========
---------- Starting test run ----------
NUnit Adapter 3.17.0.0: Test execution started
Running selected tests in C:\Users\WEIK014\source\repos\TestSourceTestProject\TestSourceTestProject\bin\Debug\netcoreapp2.1\TestSourceTestProject.dll
   NUnit3TestExecutor discovered 199 of 199 NUnit test cases
NUnit Adapter 3.17.0.0: Test execution complete
========== Test run finished: 199 Tests run in 8,6 sec (199 Passed, 0 Failed, 0 Skipped) ==========

如您所見,它甚至不承認它跳過了測試。

項目中的版本:

  • Project.Net 核心 2.1
  • NUnit 3.13.1
  • NUnit3TestAdapter 3.17.0

這里有一些視覺證明這些測試沒有運行在此處輸入圖像描述

好吧,這聽起來可能是 Visual Studio 或測試適配器中某處顯示 Unicode 控制字符的錯誤。 作為一種解決方法,您可以覆蓋控制字符的測試顯示名稱:

public static IEnumerable<TestCaseData> TestSource()
{
    for (char c = '\0'; c < 255; c++)
    {
        var data = new TestCaseData(c.ToString());
        if (char.IsControl(c))
        {
            data.SetArgDisplayNames($"{(int)c:X4}");
        }
        yield return data;
    }
}

這將保留可打印字符的顯示(例如Test("a") ),控制字符將顯示為Test(0001)等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM