C# 模拟几个谓词

C# 模拟几个谓词,c#,mocking,moq,C#,Mocking,Moq,我用一个方法创建一个模拟对象 IMyIterface dosGuard = Mock.Of<IMyIterface >( dg => dg.IsMethod1(It.IsAny<IPAddress>(), It.IsAny<string>(), It.IsAny<string>()) == false ); IMyIterface dosGuard=Mock.O

我用一个方法创建一个模拟对象

IMyIterface dosGuard = Mock.Of<IMyIterface >(
                dg =>
                dg.IsMethod1(It.IsAny<IPAddress>(), It.IsAny<string>(), It.IsAny<string>()) == false
        );
IMyIterface dosGuard=Mock.Of(
dg=>
dg.IsMethod1(It.IsAny(),It.IsAny(),It.IsAny())==false
);
我还想为其他方法指定谓词:

dg.IsMethod2(It.IsAny<IPAddress>(), It.IsAny<string>(), It.IsAny<string>()) == false
dg.IsMethod2(It.IsAny(),It.IsAny(),It.IsAny())==false

如何同时使用这两种方法?

如果要在模拟对象上设置多个对象,则不能*使用工厂方法的
mock。您需要自己设置模拟对象:

var dosGuardMock = new Mock<IMyInterface>();
dosGuardMock.Setup(dg => dg.IsMethod1(It.IsAny<IPAddress>(), It.IsAny<string>(), It.IsAny<string>())).Returns(false);
dosGuardMock.Setup(dg => dg.IsMethod2(It.IsAny<IPAddress>(), It.IsAny<string>(), It.IsAny<string>())).Returns(false);
var dosGuard = dosGuardMock.Object;

但是,我更喜欢第一个示例,因为它在
Mock
实例和“Mock”
T
实例之间有明显的区别。

如果您想在模拟对象上设置多个对象,您不能*使用
Mock.Of
工厂方法,您需要自己设置模拟对象:

var dosGuardMock = new Mock<IMyInterface>();
dosGuardMock.Setup(dg => dg.IsMethod1(It.IsAny<IPAddress>(), It.IsAny<string>(), It.IsAny<string>())).Returns(false);
dosGuardMock.Setup(dg => dg.IsMethod2(It.IsAny<IPAddress>(), It.IsAny<string>(), It.IsAny<string>())).Returns(false);
var dosGuard = dosGuardMock.Object;

但是,我更喜欢第一个示例,因为它在
Mock
实例和“Mock”
T
实例之间有明显的区别。

是的,您实际上可以使用
Mock.Of()
工厂构建整个对象的结构——一开始它看起来有点奇怪:

interface IInterface 
{
    int IntMethod();
    string StringMethod();
}
var instance = Mock.Of<IInterface>(ifc => 
                 ifc.IntMethod() == 1 &&
                 ifc.StringMethod() == "Hello");
接口界面
{
int方法();
string StringMethod();
}
var instance=Mock.Of(ifc=>
ifc.IntMethod()==1&&
ifc.StringMethod()=“你好”);
它使用boolean作为MemberAssignment,但除此之外,它将读作get me模拟IInterface,IntMethod返回1,StringMethod返回“Hello”。参数的
It.IsAny()
也可以在谓词中工作,以及嵌套的
Mock.Of
调用


一旦开始,它会变得更干净,并且可以为分配/更新根测试场景启动静态方法:即,采用“最优”模型并调整几个字段,而不必重新键入整个模型。

是的,您实际上可以使用
Mock.Of()工厂构建整个对象的结构
——刚开始它看起来有点古怪:

interface IInterface 
{
    int IntMethod();
    string StringMethod();
}
var instance = Mock.Of<IInterface>(ifc => 
                 ifc.IntMethod() == 1 &&
                 ifc.StringMethod() == "Hello");
接口界面
{
int方法();
string StringMethod();
}
var instance=Mock.Of(ifc=>
ifc.IntMethod()==1&&
ifc.StringMethod()=“你好”);
它使用boolean作为MemberAssignment,但除此之外,它将读作get me模拟IInterface,IntMethod返回1,StringMethod返回“Hello”。参数的
It.IsAny()
也可以在谓词中工作,以及嵌套的
Mock.Of
调用

一旦开始,它就会变得更干净,并且可以为分配/更新根测试场景启动静态方法:即,采用“最优”模型并调整几个字段,而不必重新键入整个模型