首页 > 解决方案 > C# NUnit 即使使用 TestFixture 也找不到合适的构造函数

问题描述

我在 C# 中使用 NUnit 来做一些单元测试。我有这个类继承结构:

[TestFixture(null)]
public abstract class BaseTests
{
    protected BaseTests(StatusesEnum? status)
    {
    }

    [Test]
    public abstract void TestMethod_1();
}



[TestFixture(null)]
public class SalesTests : BaseTests
{
    protected SalesTests(StatusesEnum? status) : base(status)
    {
    }

    //When I run this test from this class it throws the "No suitable constructor was found"
    [Test]
    public override void TestMethod_1()
    {
    }
}



//When I run the test from this class it works perfectly since it passes value to the constructor
public class CustomerTests : SalesTests
{
    public CustomerTests() : base (StatusesEnum.New) { }
}

当我运行它们时,CustomerTests它们运行得很好,并且它们按预期调用TestMEthos_1了。SalesTests

但是当我只运行这个SalesTests类时,我不断得到No suitable constructor found. 预期的结果应该是status参数将为空并且测试应该通过,因为我正在测试方法中检查该参数。

我发现很多答案都说只是添加[TestFixture]属性,但这也无济于事。所以任何关于如何解决这个问题的想法都会很棒。

标签: c#nunit

解决方案


似乎NUnit需要构造函数是公开的。下一个设置对我有用(更改了SalesTestsctor 可访问性修饰符并添加TestFixtureAttributeCustomerTests):

[TestFixture(null)]
public class SalesTests : BaseHfsTests
{
    public SalesTests(StatusesEnum? status) : base(status)
    {
    }

    [Test]
    public override void TestMethod_1()
    {
    }
}

[TestFixture]
public class CustomerTests : SalesTests
{
    public CustomerTests() : base(StatusesEnum.New)
    {
        
    }
}

推荐阅读