在NUnit Parameterised测试中找不到合适的构造函数

时间:2012-07-11 14:33:17

标签: c# unit-testing nunit

见下面的测试夹具:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;

/// <summary>
/// Tests relating to Harry Potter
/// </summary>
[TestFixture("Dumbledore")]
public class HarryPotterTests
{
    public string Name;

    public HarryPotterTests(string personName)
    {
        Name = personName;  
    }

    [Test]
    public void Test()
    {
        Console.WriteLine(Name);
    }
}

我想要实现的是查看参数化测试装置的工作原理。我之前没有使用它们,所以这是我第一次尝试它。

对我来说看起来不错。带有字符串的构造函数,并在实际测试fixture属性中传入一个字符串。它汇编。测试只是将其写入控制台窗口。

然而,测试失败并显示以下消息:

No suitable constructor was found

我错过了一些明显的东西吗?

无论我在哪里设置断点,都没有被击中,所以它很早就失败了。

7 个答案:

答案 0 :(得分:21)

我有这个问题。它是由构造函数抛出错误引起的,而不是构造函数参数的任何问题。在我的情况下,错误消息具有误导性。

答案 1 :(得分:15)

我遇到了这个问题 - 通过Resharper 8在NUnit 下运行Test类。

但是,如果我从这个表单

更改了TestFixture声明
[TestFixture("CategoryName")]

此表格:

[TestFixture(Category="CategoryName")]

然后他们工作......这也通过NUnit改进了一些东西 - 但是因为它发生在我的特定测试中,我有Resharper帮助的connectionString和Entity Framework问题而NUnit没有 - 但基本上我相信NUnit对后者更快乐语法。

答案 2 :(得分:7)

您的测试类完全有效,并且在运行NUnit 2.6和.NET 4时返回 Passed ,两者都使用NUnit GUI和Resharper 7测试运行器。

TestFixture构造函数中的参数类型与测试类构造函数的类型不匹配时,会出现错误。例如,如果我添加以下行:

[TestFixture(10)]

我将在NUnit GUI中收到以下错误:

ParameterizedNunit.HarryPotterTests(10).Test:
ParameterizedNunit.HarryPotterTests does not have a suitable constructor

答案 3 :(得分:4)

这个特殊问题是JustCode的NUnit Test Runner中的一个错误。使用Resharper 7的NUnit Runner和NUnit GUI重新运行它,都会通过。

答案 4 :(得分:2)

检查构造函数是否有任何可能失败的逻辑。事实证明我在构造函数中有一个调用(坏!),应该在TestFixtureSetUp中。在Resharper中,如果在构造函数中抛出异常,则这是带参数化测试装置的默认错误消息。

答案 5 :(得分:0)

相当明显,但如果测试的构造函数不公开,也会发生。

答案 6 :(得分:0)

以防它帮助别人。 就我而言,我使用的是TestFixtureSource,以及一个为不同的TestFixtures构建组合的函数。事实证明,数组中的元素数与构造函数的参数数量不匹配。 (我忘记了-1)