簡體   English   中英

如何使用Moq框架模擬簡單方法?

[英]How can I mock a simple method using Moq framework?

假設我有一個簡單的方法,用於檢查傳遞的數字是否為Even&返回布爾值。 我是模擬和嘗試的新手。 如何使用Moq框架模擬此方法?

public bool isEven(int x)
        {
            bool result = (x % 2 == 0) ? true : false;
            return result;
        }

假設方法是接口的一部分:

public interface IMyInterface
{
   bool isEven(int x);
}

您要做的模擬是:

Mock<IMyInterface> myMock = new Mock<IMyInterface>();
myMock.Setup(x => x.isEven(It.Any<int>())).Returns(true);

這意味着,它將以某種方式設置方法,無論傳遞給參數的值如何,都將返回true。

然后可以將該Mock傳遞給其他類/依賴項,如下所示:

var myNewObject = new Whateverclass(myMock.Object)

如果您的方法位於具體的類中,您仍然可以這樣做,但是您需要將方法標記為virtual 其余過程完全相同。

Moq在其下執行的操作將創建其自己的類的實例(例如代理),並將已在設置方法中配置的成員的返回值(方法,屬性)放入。

編輯:

具體示例:

public class MyClass
{
   public virtual bool isEven(int x) {
     return (x % 2 == 0);
   }
}

您要做的模擬是:

Mock<MyClass> myMock = new Mock<MyClass>();
myMock.Setup(x => x.isEven(It.Any<int>())).Returns(true);

var myNewObject = new Whateverclass(myMock.Object)

最后部分實現:

public class MyClass
{
   public virtual bool isEven(int x) {
         return (x % 2 == 0);
       }
   public bool OtherMethod() {
       return !isEven();
   }
}

Mock<MyClass> myMock = new Mock<MyClass>();
myMock.CallBase = true;
myMock.Setup(x => x.isEven(It.Any<int>())).Returns(true);

var result = myMock.Object.OtherMethod();

暫無
暫無

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

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