2014-10-02 56 views
0

我想多次模擬相同的界面。下面的代碼演示了我認爲阻止我的方式。在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 
    } 
} 

如果我調試代碼,我發現這兩個對象具有相同的標識符。

Image of IDoSomething mocks with same identifiers

我意識到這可能是更抽象與貧窮做,但如果有辦法解決這將是我們項目的當前位置真的很有幫助。

非常感謝提前。

+0

僅供參考,我目前正在調查這個答案是否能解決我的問題http://stackoverflow.com/a/3882743/966609 – 2014-10-02 11:07:24

+0

上面似乎並沒有幫助 – 2014-10-02 12:56:23

回答

0

原來我被應用程序複雜性拋棄了。

我其實是一個平等問題。我期望的參數是實際上失敗的複雜對象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);

完成。

+0

如果任何人都可以回答爲什麼重寫'的equals() '和'GetHashCode()'方法沒有幫助我想知道爲什麼。 – 2014-10-02 14:09:01