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);
        }
    }
}