【问题标题】:How to use Moq.MockRepository.Of() method如何使用 Moq.MockRepository.Of() 方法
【发布时间】:2012-05-17 15:11:09
【问题描述】:

Moq.MockRepository.Of() 和 Moq.MockRepository.OneOf() 的正确用法是什么? 我已经尝试过这样的事情来试图弄清楚。

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

我发现 cnt 只是不断增加而没有尽头。是什么赋予了?没有关于这方面的文档。

【问题讨论】:

    标签: c# unit-testing mocking moq


    【解决方案1】:

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

    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();
        }
    }
    

    【讨论】:

    • 我很难获得“ITest”模拟的配置实例。示例代码按原样工作,但否则获取“模拟”实例会导致 MockException: All invocations of the mock must have a corresponding setup. var mock = repo.Create&lt;ITest&gt;().Object;var mock = repo.Of&lt;ITest&gt;().First(); 我想我做错了什么?
    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 2013-09-19
    • 2012-03-10
    • 2012-08-31
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多