假设我有一个简单的方法来检查传递的数字是否为偶数并返回一个 bool 值。我是 mock 和尝试的新手。我如何使用 Moq 框架模拟此方法?
public bool isEven(int x)
{
bool result = (x % 2 == 0) ? true : false;
return result;
}
最佳答案
假设方法是接口(interface)的一部分:
public interface IMyInterface
{
bool isEven(int x);
}
你用来模拟它的是:
Mock<IMyInterface> myMock = new Mock<IMyInterface>();
myMock.Setup(x => x.isEven(It.Any<int>())).Returns(true);
这意味着,它将以某种方式设置方法,无论作为参数传递的值如何,都将返回 true。
然后您可以将该模拟传递给其他类/依赖项:
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();
关于c# - 如何使用 Moq 框架模拟一个简单的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54969929/