shy*_*kov 3 .net c# nunit unit-testing
我希望我的基于基于NUnit框架的单元测试在Visual Studio测试资源管理器中更具可读性。
例如,最好使用类似的东西(通过从属性中分配值)代替Test_Case_1或TestCase1拥有,但方法名称中不允许使用空格和字符。Test Case #1, Category: First, Category: Second[Category]
我知道它在中可能是开箱即用的xUnit,但是我不能涉及它,因为我正在使用无法使用xUnit框架实现的自定义项。
是否可以用重写单元测试的显示名称NUnit?到目前为止,我可以看到,该FullName字段TestDetail具有私有设置程序。
是否有其他方法或方法更改NUnit测试的显示名称?
如果使用参数化测试,则支持此功能,可以TestName在添加TestCase属性时指定。
如果您没有使用TestCase,那么您可以将其用作不太理想的解决方案,以实现您想要的工作。因此,您可以这样声明测试:
[TestCase(null,TestName="Test Case #1, Category: First, Category: Second")]
public void TestCase(object ignored)
Run Code Online (Sandbox Code Playgroud)
这是不理想的,因为它不是编程的,因此您必须手动输入测试名称,而不是根据测试方法的属性生成它。您还必须将参数传递给方法,这就是ignored和的含义null。当然,您可以开始使用参数化测试,在这种情况下,您需要将实际值传递给测试。
[TestCase(5,TestName="Test Case #1, Category: First, Category: Second")]
public void TestCase(int someInput) {
Assert.AreEqual(5, someInput);
}
Run Code Online (Sandbox Code Playgroud)
您可以创建自己的 Name 属性:
// I used the same namespace for convenience
namespace NUnit.Framework
{
public class NameAttribute : NUnitAttribute, IApplyToTest
{
public NameAttribute(string name)
{
Name = name;
}
public string Name { get; set; }
public void ApplyToTest(Test test)
{
test.Properties.Add("Name", Name);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像使用常规 NUnit 属性一样使用它(就像类别和描述一样)。
[Test, Name("My Awesome Test"), Category("Cool.Tests"), Description("All cool tests")]
public void Test313()
{
// Do something
}
Run Code Online (Sandbox Code Playgroud)
您可以在 TestContext 中看到数据:
if (TestContext.CurrentContext.Test.Properties.ContainsKey("Name"))
{
name = TestContext.CurrentContext.Test.Properties.Get("Name") as string;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7533 次 |
| 最近记录: |