簡體   English   中英

如果基於條件執行了方法,請使用xUnit和Moq進行驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM