【问题标题】:C# NUnit reports weird error: "No suitable constructor was found"C# NUnit 报告奇怪的错误:“没有找到合适的构造函数”
【发布时间】:2020-05-08 16:26:21
【问题描述】:

我正在使用 VS2019 并使用 .NET Core 模板创建了一个 NUnit 测试项目,然后我添加了以下代码:

using NUnit.Framework;

namespace xxx
{
    class Immutable
    {
        public Immutable(string _cur, string _addr)
        {
            Currency = _cur;
            Address = _addr;
        }

        public string Currency { get; }
        public string Address { get; }

        [Test]
        public static void Test() // reports this line has problem?
        {
            var m = new Immutable("usd", "us");
            string s = m.Currency;
            Assert.AreEqual("usd", s);
        }
    }
}

构建正常,但是当我运行它时,测试资源管理器会报告:

Test
Source: xxx.cs line 17
Duration: < 1 ms

Message: 
    OneTimeSetUp: No suitable constructor was found

我不太明白是什么问题,如何解决?

【问题讨论】:

  • NUnit 测试方法(通常)是实例方法。 .NET 测试通常是结构化的,因此您将代码放在一个项目中(通常是一个类库,但它可以是一个应用程序),然后是一个单独的测试项目,其中包含您的测试装置,并引用包含您的代码的项目。您通常不会在要测试的代码内部嵌入测试方法。然而,理论上,NUnit 确实支持静态测试方法,所以我不确定它为什么要实例化Immutable。不过,它应该在测试夹具上需要一个 [TestFixture] 属性。
  • 你自己测试单元测试类吗?

标签: c# unit-testing .net-core constructor


【解决方案1】:

如果你的测试类有参数化构造函数,你需要带有参数的TestFixture属性来构造它。

试试这个:

[TestFixuture("usd", "us")]
class Immutable
{
    ...
}

见document

并强烈建议您单独一个测试类进行测试。

[TestFixture]
public class ImmutableTest
{
    [Test]
    public void Test()
    {
        var m = new Immutable("usd", "us");
        string s = m.Currency;
        Assert.AreEqual("usd", s);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多