7

我有一个测试类如下:

[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

4 回答 4

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);
        }
    }
}
于 2012-12-20T13:46:16.680 回答
0

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

于 2012-04-10T09:16:31.223 回答
0

事实证明,如果参数化测试夹具的构造函数中出现任何问题,这就是绝对错误消息。当其他代码中的东西失败时,您不会得到返回的实际异常信息。

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

于 2013-05-30T08:42:26.677 回答
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) );
    }
}
于 2012-10-22T11:35:23.757 回答