11

请参阅以下测试夹具:

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

我想要实现的是看看参数化测试夹具是如何工作的。我以前没有使用过它们,所以这是我第一次尝试它。

我觉得没问题。带有字符串的构造函数,并在实际测试夹具属性中传入字符串。它编译。测试只是将它写到控制台窗口。

但是,测试失败并显示以下消息:

No suitable constructor was found

我是否遗漏了一些显而易见的东西?

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

4

7 回答 7

20

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

于 2013-11-06T11:44:13.323 回答
14

我遇到了这个问题——在 NUnit 下通过 Resharper 8 运行测试类。

但是,如果我从此表单更改了 TestFixture 声明

[TestFixture("CategoryName")]

这个表格:

[TestFixture(Category="CategoryName")]

然后他们工作了......这也通过 NUnit 改进了一些事情 - 但在我的特定测试中,我遇到了 Resharper 帮助解决的 connectionString 和实体框架问题,而 NUnit 没有 - 但基本上我相信 NUnit 对后一种语法更满意。

于 2013-09-14T10:47:32.537 回答
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
于 2012-07-12T08:23:14.590 回答
4

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

于 2012-07-17T09:08:29.867 回答
2

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

于 2013-05-30T08:33:31.277 回答
0

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

于 2017-06-01T16:50:20.053 回答
0

以防万一它帮助别人。在我的例子中,我使用了 TestFixtureSource,以及一个为不同的 TestFixture 构建组合的函数。原来数组中的元素数量与构造函数的参数数量不匹配。(我忘了-1)

于 2018-02-01T16:57:23.847 回答