[英]Verify with xUnit and Moq if a method was executed base on a condition
使用xUnit和Moq檢查是否根據另一個方法的返回值執行方法。 例:
public class A
{
public bool M1() { // return true or false ... }
public void M2() { // Do something ..... }
}
public class B
{
private A objectA;
public B(A a)
{
objectA = a;
}
public void Mb ()
{
for(int i = 0; i <= 5; i++)
{
if (objectA.M1())
{
return;
}
objectA.M2();
}
}
}
我想驗證這樣的事情:
[Fact]
public void Test()
{
// Arrange
Mock<A> mockA = new Mock<A>();
mockA.Setup(x => x.M1()).Return(true);
mockA.Setup(x => x.M2());
// Act
B b = new B(mockA.object);
b.Mb();
// Assert
mockA.Verify(m => m.M2(), """all exactly time that M1 returned false"""); // if this were possible it would be perfect
}
是否可以使用xUnit和Moq做類似的事情?
你應該可以做這樣的事情:
[Fact]
public void Test()
{
// Arrange
Mock<A> mockA = new Mock<A>();
int count = 0;
mockA.Setup(x => x.M1()).Returns(true).Callback(() => { count++; });
mockA.Setup(x => x.M2());
// Act
B b = new B(mockA.Object);
b.Mb();
// Assert
mockA.Verify(m => m.M2(), Times.Exactly(count), "all exactly time that M1 returned false");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.