簡體   English   中英

使用 Moq 驗證方法調用

[英]Verify a method call using Moq

我對 C# 中的單元測試和學習使用 Moq 相當陌生。 下面是我要測試的課程。

class MyClass
{
    SomeClass someClass;
    public MyClass(SomeClass someClass)
    {
        this.someClass = someClass;     
    }

    public void MyMethod(string method)
    {
        method = "test"
        someClass.DoSomething(method);
    }   
}

class Someclass
{
    public DoSomething(string method)
    {
        // do something...
    }
}

下面是我的測試類:

class MyClassTest
{
    [TestMethod()]
    public void MyMethodTest()
    {
        string action="test";
        Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
        mockSomeClass.SetUp(a => a.DoSomething(action));
        MyClass myClass = new MyClass(mockSomeClass.Object);
        myClass.MyMethod(action);
        mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>()));
    }
}

我收到以下異常:

Expected invocation on the mock at least once, but was never performed
No setups configured.
No invocations performed..

我只想驗證是否正在調用方法“MyMethod”。 我錯過了什么嗎?

您正在檢查錯誤的方法。 Moq 要求您設置(然后選擇驗證)依賴項類中的方法。

你應該做更多這樣的事情:

class MyClassTest
{
    [TestMethod]
    public void MyMethodTest()
    {
        string action = "test";
        Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();

        mockSomeClass.Setup(mock => mock.DoSomething());

        MyClass myClass = new MyClass(mockSomeClass.Object);
        myClass.MyMethod(action);

        // Explicitly verify each expectation...
        mockSomeClass.Verify(mock => mock.DoSomething(), Times.Once());

        // ...or verify everything.
        // mockSomeClass.VerifyAll();
    }
}

換句話說,您正在驗證調用MyClass#MyMethod ,您的類肯定會在該過程中調用SomeClass#DoSomething一次。 請注意,您不需要Times參數; 我只是在證明它的價值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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