为什么 nunit 不 运行 包含 control/special 个字符的测试
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 = '[=12=]'; c < 255; c++)
{
yield return c.ToString();
}
}
}
然后 运行 中的测试 Visual Studio 可以发现所有测试,但不会 运行 所有测试。
这些是非 运行ning 的 ascii 字符范围:
U_0001 - U_0006
U_000E - U_001F
U_007F - U_0084
U_0086 - U_009F
我们目前使用其中一些字符,如 U_0002
用于网络工作相关测试,这些字符包含在测试中但目前不 运行
这是测试的输出 运行
---------- 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) ==========
如您所见,它甚至没有意识到它跳过了测试。
项目中的版本:
- .Net Core 2.1 项目
- NUnit 3.13.1
- NUnit3TestAdapter 3.17.0
这是一些视觉证据,证明这些测试没有 运行
嗯,这听起来可能是 Visual Studio 或显示 Unicode 控制字符的测试适配器中某处的错误。作为解决方法,您可以覆盖控制字符的测试显示名称:
public static IEnumerable<TestCaseData> TestSource()
{
for (char c = '[=10=]'; 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)
,等等
如果我有一个测试class喜欢
public class Tests
{
[TestCaseSource(nameof(TestSource))]
public void Test(string c)
{
Assert.Pass();
}
public static IEnumerable<object> TestSource()
{
for (char c = '[=12=]'; c < 255; c++)
{
yield return c.ToString();
}
}
}
然后 运行 中的测试 Visual Studio 可以发现所有测试,但不会 运行 所有测试。
这些是非 运行ning 的 ascii 字符范围:
U_0001 - U_0006
U_000E - U_001F
U_007F - U_0084
U_0086 - U_009F
我们目前使用其中一些字符,如 U_0002
用于网络工作相关测试,这些字符包含在测试中但目前不 运行
这是测试的输出 运行
---------- 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) ==========
如您所见,它甚至没有意识到它跳过了测试。
项目中的版本:
- .Net Core 2.1 项目
- NUnit 3.13.1
- NUnit3TestAdapter 3.17.0
这是一些视觉证据,证明这些测试没有 运行
嗯,这听起来可能是 Visual Studio 或显示 Unicode 控制字符的测试适配器中某处的错误。作为解决方法,您可以覆盖控制字符的测试显示名称:
public static IEnumerable<TestCaseData> TestSource()
{
for (char c = '[=10=]'; 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)
,等等