Mock.Verify() 失败 - 此设置不匹配?
Mock.Verify() failed - This setup was not matched?
我有以下测试代码。
var test = "Test";
var command = new MyCommand { V = test };
var mock = new Mock<IRepository>(); // IRepository has the method of Save()
var p = new P(test);
mock.Setup(x => x.Save(p)).Verifiable();
var sut = new C(mock.Object);
var result = await sut.M(command);
mock.Verify();
测试应该通过。但是,它因
错误而失败
Message:
Moq.MockException : Mock:
This mock failed verification due to the following:
IRepository x => x.Save(P):
This setup was not matched.
Stack Trace:
Mock.Verify()
sut.M()
会将字符串 X 转换为类型 P
,值为 P(X)
.
在我看来,您想验证模拟中的 Save 方法是使用特定值调用的,而不仅仅是类型。
我已经尝试了类似下面的方法并且相信它应该有效。我修改了你的例子。
var test = "Test";
var command = new MyCommand { V = test };
var mock = new Mock<IRepository>();
IRepository has the method of Save()
var p = new P(test);
mock.Setup(x => x.Save(It.IsAny<P>());
var sut = new C(mock.Object);
var result = await sut.M(command);
mock.Verify(x => x.Save(It.Is<P>(v => v.Value.Equals(p.Value))), Times.AtLeastOnce);
这测试特定 属性 的值是否相等。
我用以下测试对此进行了测试:
var test = "Test";
var mock = new Mock<ITestRepository>(); // ITestRepository has the method of Save()
var p = new P(test);
mock.Setup(x => x.Save(It.IsAny<P>()));
mock.Object.Save(new P(test));
mock.Verify(x => x.Save(It.Is<P>(v => v.Value.Equals(p.Value))), Times.AtLeastOnce);
我有以下测试代码。
var test = "Test";
var command = new MyCommand { V = test };
var mock = new Mock<IRepository>(); // IRepository has the method of Save()
var p = new P(test);
mock.Setup(x => x.Save(p)).Verifiable();
var sut = new C(mock.Object);
var result = await sut.M(command);
mock.Verify();
测试应该通过。但是,它因
错误而失败Message: Moq.MockException : Mock: This mock failed verification due to the following: IRepository x => x.Save(P): This setup was not matched. Stack Trace: Mock.Verify()
sut.M()
会将字符串 X 转换为类型 P
,值为 P(X)
.
在我看来,您想验证模拟中的 Save 方法是使用特定值调用的,而不仅仅是类型。
我已经尝试了类似下面的方法并且相信它应该有效。我修改了你的例子。
var test = "Test";
var command = new MyCommand { V = test };
var mock = new Mock<IRepository>();
IRepository has the method of Save()
var p = new P(test);
mock.Setup(x => x.Save(It.IsAny<P>());
var sut = new C(mock.Object);
var result = await sut.M(command);
mock.Verify(x => x.Save(It.Is<P>(v => v.Value.Equals(p.Value))), Times.AtLeastOnce);
这测试特定 属性 的值是否相等。
我用以下测试对此进行了测试:
var test = "Test";
var mock = new Mock<ITestRepository>(); // ITestRepository has the method of Save()
var p = new P(test);
mock.Setup(x => x.Save(It.IsAny<P>()));
mock.Object.Save(new P(test));
mock.Verify(x => x.Save(It.Is<P>(v => v.Value.Equals(p.Value))), Times.AtLeastOnce);