并非所有测试都在包含数组的参数化NUnit TestFixture中运行

时间:2012-04-05 13:39:57

标签: 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
    }
}

在ReSharper 6.1和NUnit 2.5.10中运行此测试时,测试不会按预期运行两次,它只运行一次。在测试结果中,我看到列出

my_test("someurl1", System.String[], 15)

这让我觉得这两个灯具被视为相同,而且NUnit没有区分两个测试中的字符串数组。

作为一种解决方法,我在构造函数中添加了一个伪参数。如果我为每个灯具设置不同的值,那么所有测试都会运行。

不可能让TestFixtures包含包含不同值的数组吗?我刚从ReSharper 5升级,所以我想知道这是否相关。我已经阅读了6.x中参数化测试的一些问题。

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

我认为这与在TestFixture构造函数中新建数组有关,我在某处读到你不能这样做。

答案 2 :(得分:0)

您是否尝试在其下创建单独的测试作为通用的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) );
    }
}

答案 3 :(得分:0)

事实证明,如果ANYTHING在参数化测试夹具的构造函数中出错,这是绝对错误消息。你没有得到实际的异常信息,就像其他代码中的东西失败一样。

所以你可能应该将你的设置代码移动到[SetUp][TestFixtureSetUp],或者确保你的构造函数正在执行而没有错误。但实际上你应该做第一个建议,只在构造函数中保存测试夹具参数,并用另一种方法对它们做一些事情。