With xUnit and Moq check if a method is executed base on the return value of another method. Example:
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();
}
}
}
I want to verify something like this:
[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
}
Is it possible to do something like that with xUnit and Moq ??
You should be able to do something like this:
[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");
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With