Подигравка на същия интерфейс повече от веднъж в 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 се подиграва със същите идентификатори

Осъзнавам, че това може да е по-скоро свързано с лоша абстракция, но би било наистина полезно при текущата позиция на нашия проект, ако има начин да се заобиколи това.

Много благодаря предварително.


person Matt Canty    schedule 02.10.2014    source източник
comment
За информация, в момента проучвам дали този отговор може да реши проблема ми stackoverflow.com/a/3882743/966609   -  person Matt Canty    schedule 02.10.2014
comment
Горното изглежда не е помогнало   -  person Matt Canty    schedule 02.10.2014


Отговори (1)


Оказа се, че съм бил изхвърлен от курса от сложността на приложенията.

Всъщност бях въпрос на равенство. Параметрите, които очаквам, са сложни обекти, които всъщност не успяват 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);

Свършен.

person Matt Canty    schedule 02.10.2014
comment
Ако някой може да отговори защо замяната на методите Equals() и GetHashCode() не помага, бих искал да чуя защо. - person Matt Canty; 02.10.2014