繁体   English   中英

在Rhino中多次模拟相同的界面

[英]Mocking same interface more than once in Rhino

我想多次模拟相同的界面。 下面的代码演示了我认为阻止了我的事情。

我已经阅读了一遍,找不到解决方案。 似乎无法区分_mockOne和_mockTwo。

public interface IDoSomething
{
}

[TestFixture]
class RhinoTest
{
    private IDoSomething _mockOne;
    private IDoSomething _mockTwo;

    [SetUp]
    public void SetUp()
    {
        _mockOne = MockRepository.GenerateMock<IDoSomething>();
        _mockTwo = MockRepository.GenerateMock<IDoSomething>();

        var somethings = new Dictionary<string, IDoSomething>
                         {
                             {"one", _mockOne},
                             {"two", _mockTwo}
                         };

        //Pass this dictionary to a constructor for use in tests
    }
}

如果调试代码,则会发现两个对象具有相同的标识符。

具有相同标识符的IDoSomething模拟图像

我意识到这可能与不良抽象有关,但如果有解决办法,它将对我们项目的当前位置确实有帮助。

提前谢谢了。

原来,我被应用程序的复杂性弄得一团糟。

我实际上是一个平等问题。 我期望的参数是复杂的对象,实际上Assert.AreEqual(...);失败Assert.AreEqual(...);

希望在这种情况下加快其他人的速度。 这是一个失败的测试。

[Test]
public void Test()
{
    var expectedInput = new Object1 { DeeperObject = new Object2 { MyString = "Hello World" } };

    const string expectedOutput = "Hello Matt!";

    _mockOne.Expect(s => s.ReturnSomething(expectedInput))
            .Return(expectedOutput);

    var actualInput = new Object1 { DeeperObject = new Object2 { MyString = "Hello World" } };

    var actualOutput = _mockOne.ReturnSomething(actualInput);

    Assert.NotNull(actualOutput);
}

要解决此问题,需要特别匹配参数属性。

_mockOne.Expect开头的行替换为:

_mockOne.Expect(s => s .ReturnSomething(Arg<Object1> .Matches(o => o.DeeperObject.MyString == expectedInput.DeeperObject.MyString))) .Return(expectedOutput);

做完了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM