如何使用 Moq 框架模拟一个简单的方法?
How can I mock a simple method using Moq framework?
假设我有一个简单的方法来检查传递的数字是否为 Even & returns 布尔值。我是嘲笑和尝试的新手。如何使用 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);
这意味着什么,它将以某种方式设置方法,无论作为参数传递的值如何,都将 return 为真。
然后您可以将该 Mock 传递给其他 class / 依赖项,如下所示:
var myNewObject = new Whateverclass(myMock.Object)
如果您的方法存在于具体 class 中,您仍然可以这样做,但您需要将您的方法标记为 virtual
。其余过程完全相同。
Moq
在它下面做的是创建它自己的实例 class(如代理)并为已配置的成员(方法、属性)放置 return 值在设置方法中。
编辑:
具体例子:
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();
假设我有一个简单的方法来检查传递的数字是否为 Even & returns 布尔值。我是嘲笑和尝试的新手。如何使用 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);
这意味着什么,它将以某种方式设置方法,无论作为参数传递的值如何,都将 return 为真。
然后您可以将该 Mock 传递给其他 class / 依赖项,如下所示:
var myNewObject = new Whateverclass(myMock.Object)
如果您的方法存在于具体 class 中,您仍然可以这样做,但您需要将您的方法标记为 virtual
。其余过程完全相同。
Moq
在它下面做的是创建它自己的实例 class(如代理)并为已配置的成员(方法、属性)放置 return 值在设置方法中。
编辑:
具体例子:
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();