C# DonorManagementTests没有默认构造函数(nunit/moq)
我使用nunit的moq,我的测试不会让我失败或通过。它说它没有默认的构造函数。我怀疑我没有正确地将接口注入构造函数 DonorManagementTests 您知道我需要在代码中更改什么吗?NUnit文档说明: 非参数化装置必须具有默认构造函数。 参数化夹具必须具有与提供的参数匹配的构造函数。 NUnit文件中说: 非参数化装置必须具有默认构造函数。 参数化夹具必须具有与提供的参数匹配的构造函数。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
您的测试类必须有一个默认的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);
}
}