C# DonorManagementTests没有默认构造函数(nunit/moq)

C# DonorManagementTests没有默认构造函数(nunit/moq),c#,unit-testing,dependency-injection,nunit,moq,C#,Unit Testing,Dependency Injection,Nunit,Moq,我使用nunit的moq,我的测试不会让我失败或通过。它说它没有默认的构造函数。我怀疑我没有正确地将接口注入构造函数 DonorManagementTests 您知道我需要在代码中更改什么吗?NUnit文档说明: 非参数化装置必须具有默认构造函数。 参数化夹具必须具有与提供的参数匹配的构造函数。 NUnit文件中说: 非参数化装置必须具有默认构造函数。 参数化夹具必须具有与提供的参数匹配的构造函数。 您的测试类必须有一个默认的C'tor 将测试类更改为: [TestFixture] public

我使用nunit的moq,我的测试不会让我失败或通过。它说它没有默认的构造函数。我怀疑我没有正确地将接口注入构造函数

DonorManagementTests

您知道我需要在代码中更改什么吗?

NUnit文档说明:

非参数化装置必须具有默认构造函数。 参数化夹具必须具有与提供的参数匹配的构造函数。 NUnit文件中说:

非参数化装置必须具有默认构造函数。 参数化夹具必须具有与提供的参数匹配的构造函数。
您的测试类必须有一个默认的C'tor

将测试类更改为:

[TestFixture]
public class DonorManagementTests
{
    private Mock<IValidation> _mockValidation;
    private DonorManagement _donorManagement;

    [SetUp]
    public TestInit()
    {
        _mockValidation = new Mock<IValidation>();
        _donorManagement = new DonorManagement(_mockValidation.Object);

    }

    [Test, Description("View correct gift aid to two decimal places")]
    public void DonorViewGiftAid()
    {
        const int donation = 20;
        _mockValidation.Setup(x => x.ValidateDonation(donation)).Returns(20.00m);
        var res = _donorManagement.GiftAidAmount(donation);
        Assert.IsInstanceOf(typeof (decimal), res);
        _mockValidation.Verify(x => x.ValidateDonation(donation), Times.Once);
    }
}

现在,每个测试都将被隔离,您将能够执行测试。

您的测试类必须有一个默认的C'tor

将测试类更改为:

[TestFixture]
public class DonorManagementTests
{
    private Mock<IValidation> _mockValidation;
    private DonorManagement _donorManagement;

    [SetUp]
    public TestInit()
    {
        _mockValidation = new Mock<IValidation>();
        _donorManagement = new DonorManagement(_mockValidation.Object);

    }

    [Test, Description("View correct gift aid to two decimal places")]
    public void DonorViewGiftAid()
    {
        const int donation = 20;
        _mockValidation.Setup(x => x.ValidateDonation(donation)).Returns(20.00m);
        var res = _donorManagement.GiftAidAmount(donation);
        Assert.IsInstanceOf(typeof (decimal), res);
        _mockValidation.Verify(x => x.ValidateDonation(donation), Times.Once);
    }
}

现在,每个测试都将被隔离,您将能够执行测试。

我需要添加一个设置方法。谢谢。我需要添加一个设置方法。谢谢。您的构造函数DonorManagementTests甚至不使用其参数。您可以删除它,public DonorManagementTests{…}。但是,如果您向同一个类添加更多的测试,请注意Old Fox在回答中所说的:当许多测试一起运行时,实例构造函数只运行一次。另一方面,具有[SetUp]属性的方法将在每次测试之前运行。您的构造函数DonorManagementTests甚至不使用其参数。您可以删除它,public DonorManagementTests{…}。但是,如果您向同一个类添加更多的测试,请注意Old Fox在回答中所说的:当许多测试一起运行时,实例构造函数只运行一次。另一方面,具有[SetUp]属性的方法将在每次测试之前运行。
[TestFixture]
public class DonorManagementTests
{
    private Mock<IValidation> _mockValidation;
    private DonorManagement _donorManagement;

    [SetUp]
    public TestInit()
    {
        _mockValidation = new Mock<IValidation>();
        _donorManagement = new DonorManagement(_mockValidation.Object);

    }

    [Test, Description("View correct gift aid to two decimal places")]
    public void DonorViewGiftAid()
    {
        const int donation = 20;
        _mockValidation.Setup(x => x.ValidateDonation(donation)).Returns(20.00m);
        var res = _donorManagement.GiftAidAmount(donation);
        Assert.IsInstanceOf(typeof (decimal), res);
        _mockValidation.Verify(x => x.ValidateDonation(donation), Times.Once);
    }
}