gpt4 book ai didi

c# - 使用 xUnit 和 Moq 验证方法是否基于条件执行

转载 作者:太空狗 更新时间:2023-10-30 00:48:06 27 4
gpt4 key购买 nike

使用 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");
}

关于c# - 使用 xUnit 和 Moq 验证方法是否基于条件执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com