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