Haf*_*han 6 c# unit-testing moq
我收到一个错误
在模拟上调用一次,但为 0 次
下面是我的代码结构
public class GenerateAddress : IGenerateAddress
{
public GenerateAddress(IAddress createAdd, IValidate validate) {
//constructor
}
public Address GetAddressFromA(string name){..}
}
public class SaveAddress : ISaveAddress
{
public SaveAddress(IGenerateAddress generateaddress) {
//constructor
}
public bool Save(string name)
{
var address = generateaddress.GetAddressFromA(name);
......
//Rest of the code to save
}
}
Run Code Online (Sandbox Code Playgroud)
测试类 SaveAddress 的测试方法
public void TestVerifyGetAddressIsCalled()
{
var mockIAddress = new Mock<IAddress>();
var mockValidate = new Mock<IValidate>();
var genAddress = new Mock<IGenerateAddress>();
var objGenAdress = new GenerateAddress(mockIAddress.Object, mockValidate.Object) //
var objSaveAddress = new SaveAddress(objGenAdress);
objSaveAddress.Save("dddd");
//Verify if IGenerateAddress 'GenerateAddress' is called
genAddress.Verify(a=>a.GenerateAddress("ddddd"),Times.Once); // Throws Excepted Invocation
}
Run Code Online (Sandbox Code Playgroud)
我需要验证是否GenerateAddress
被调用。我也做了Setup
并为Address
对象分配了值,但即使这些值也没有设置..不知道出了什么问题。
You are using an IGenerateAddress
you created manually (objGenAdress
) with SaveAddress
instead of the mocked genAddress
.
Also given that the SUT is the SaveAddress
which only needed the IGenerateAddress
, there is no need for the other mocks.
public void TestVerifyGetAddressIsCalled() {
//Arrange
var genAddress = new Mock<IGenerateAddress>();
var objSaveAddress = new SaveAddress(genAddress.Object);
var name = "dddd";
//Act
objSaveAddress.Save(name);
//Assert
//Verify if 'IGenerateAddress.GenerateAddress' is called
genAddress.Verify(a => a.GenerateAddress(name), Times.Once);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18716 次 |
最近记录: |