C# 并非所有测试都在包含数组的参数化NUnit TestFixture中运行
我有一个测试类,如下所示:C# 并非所有测试都在包含数组的参数化NUnit TestFixture中运行,c#,testing,nunit,resharper,parameterized,C#,Testing,Nunit,Resharper,Parameterized,我有一个测试类,如下所示: [TestFixture("someurl1", new[] { "param1", "param2" }, 15)] [TestFixture("someurl2", new[] { "param3" }, 15)] public class my_test { public my_test(string url, string[] fields, int someVal) { // test setup } } 在ReSh
[TestFixture("someurl1", new[] { "param1", "param2" }, 15)]
[TestFixture("someurl2", new[] { "param3" }, 15)]
public class my_test
{
public my_test(string url, string[] fields, int someVal)
{
// test setup
}
}
在ReSharper 6.1和NUnit 2.5.10中运行此测试时,测试不会运行两次,正如预期的那样,它只运行一次。在测试结果中,我看到了列表
my_test("someurl1", System.String[], 15)
这使我认为这两个fixture被视为相同的,而NUnit在这两个测试中没有区分字符串数组
作为一种解决方法,我在构造函数中添加了一个伪参数。如果我为每个装置设置不同的值,那么所有测试都会运行
不可能使用包含不同值的数组的TestFixture吗?我刚从ReSharper 5升级,所以我想知道这是否相关。我在6.x中读到了一些关于参数化测试的问题 我认为这与在TestFixture构造函数中更新一个数组有关,我在某个地方读到你不能这么做 您是否尝试过在其下创建单个测试作为通用测试夹具???差不多
[TestFixture]
public class my_test
{
private bool my_test(string url, string[] fields, int someVal)
{
// test setup
return DidTestCompleteOk;
}
[Test]
public void TestURL1()
{
Assert.IsTrue( my_test("someurl1", new[] { "param1", "param2" }, 15));
}
[Test]
public void TestURL2()
{
Assert.IsTrue( my_test("someurl2", new[] { "param3" }, 15) );
}
}
如果参数化测试夹具的构造函数中出现任何错误,那么这就是绝对错误消息。当其他代码中的东西失败时,您不会得到返回的实际异常信息
因此,您可能应该将设置代码移动到
[setup]
或[TestFixtureSetUp]
或真正确保构造函数执行时没有错误。但实际上,您应该执行第一个建议,只在构造函数中保存测试夹具参数,并用另一种方法处理它们。它在NUnit runner中工作吗?另外,感谢您指出您可以使用参数化测试夹具,因为我不知道这是可能的。只是在NUnit runner中进行了尝试,并且成功地运行了所有测试。我想这可能与ReSharper的升级有关。我以前在ReSharper的runner上遇到过问题。我现在只坚持修女式的。
[TestFixture("someurl1", "param1|param2", 15)]
[TestFixture("someurl2", "param3", 15)]
public class my_test
{
private string[] _fields;
public my_test(string url, string fieldList, int someVal)
{
_fields = fieldList.Split('|');
// test setup
}
[Test]
public void listFields()
{
foreach (var field in _fields)
{
Console.WriteLine(field);
}
}
}