C# 如何使用Moq.MockRepository.Of()方法

C# 如何使用Moq.MockRepository.Of()方法,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,Moq.MockRepository.of()和Moq.MockRepository.OneOf()的正确用法是什么? 我试过类似的方法来解决这个问题 var mr = new MockRepository(MockBehavior.Strict); var m = mr.Of<ISomeInterface>(); foreach (var obj in m) cnt++; var mr=newmockrepository(MockBehavior.Strict); var

Moq.MockRepository.of()和Moq.MockRepository.OneOf()的正确用法是什么? 我试过类似的方法来解决这个问题

var mr = new MockRepository(MockBehavior.Strict);
var m = mr.Of<ISomeInterface>();
foreach (var obj in m)
    cnt++;
var mr=newmockrepository(MockBehavior.Strict);
var m=mr.Of();
foreach(var obj,单位:m)
cnt++;

我发现cnt一直在不断增加。有什么好处?关于这方面的文档尚未提供。

您可以使用
Moq.MockRepository.Of()
通过表达式创建mock。这最好通过一个例子来解释:

public interface ITest
{
    String Say();
    Int32 DoSomething(Int32 a, Int32 b);
}

class Program
{
    public static void Main()
    {
        var repo = new MockRepository(MockBehavior.Strict);
        var mock = repo.Of<ITest>()
                       .Where(s => s.Say() == "Hi!")
                       .Where(s => s.DoSomething(5, 4) == 20)
                       .Where(s => s.DoSomething(4, 5) == 9)
                       .Where(s => s.DoSomething(It.IsAny<Int32>(), 7) == 99)
                       .First();

        Console.WriteLine(mock.Say());                 // prints Hi!
        Console.WriteLine(mock.DoSomething(5, 4));     // prints 20
        Console.WriteLine(mock.DoSomething(4, 5));     // prints 9
        Console.WriteLine(mock.DoSomething(23423, 7)); // prints 99
        Console.WriteLine(mock.DoSomething(0, 0));     // Fail due to MockBehavior.Strict

        Console.ReadKey();
    }
}
公共接口测试
{
字符串Say();
Int32剂量测定法(Int32 a、Int32 b);
}
班级计划
{
公共静态void Main()
{
var repo=新的MockRepository(MockBehavior.Strict);
var mock=repo.Of()
.Where(s=>s.Say()==“嗨!”)
其中(s=>s.DoSomething(5,4)==20)
其中(s=>s.DoSomething(4,5)==9)
.Where(s=>s.DoSomething(It.IsAny(),7)==99)
.First();
Console.WriteLine(mock.Say());//打印嗨!
Console.WriteLine(mock.DoSomething(5,4));//打印20
Console.WriteLine(mock.DoSomething(4,5));//打印9
Console.WriteLine(mock.DoSomething(23423,7));//打印99
Console.WriteLine(mock.DoSomething(0,0));//由于MockBehavior.Strict而失败
Console.ReadKey();
}
}

我在获取“ITest”模拟的配置实例时遇到困难。示例代码按原样工作,但获取“mock”实例会导致
MockException:mock的所有调用都必须有相应的设置。
var mock=repo.Create().Object
var mock=repo.Of().First()