RhinoMocks AssertWasCalled для метода смоделированного объекта, который должен вернуть объект? - PullRequest
1 голос
/ 08 января 2010

Используя RhinoMocks, у меня возникает ситуация catch-22: я хочу убедиться, что метод вызывается, но для этого метода должен быть возвращен объект, потому что возвращаемый объект действует в следующей строке. Другими словами, насмешка над интерфейсом просто возвращает нулевое значение, но не насмешка над ним не дает мне никакого способа убедиться, что метод был вызван отдельно от какого-то интеграционного теста.

Поэтому, глядя на надуманный образец ниже, который я скинул, есть ли способ сделать то, что я хочу? Я подумал, что может быть способ настроить метод AssertWasCalled так, чтобы он действительно возвращал что-то, например, при задании метода, но ... спасибо за любые указатели (особенно, если это просто недостаток проекта, который следует устранить вместо этого).

public class SomeClass
{
    private readonly ISomeMapper _someMapper;
    [Inject]
    public Test(ISomeMapper someMapper)
    {
        _someMapper = someMapper;
    }

    public SomeReturnType SomeMethod(IEnumerable<ISomethingToMap> somethings)
    {
        //foreach over somethings and do something based on various properties for each

        MappedSomething mappedSomething = _someMapper.Map(something); // AssertWasCalled here
        mappedSomething.SomeProperty = somethingFromSomewhere; // Which gets a null reference exception here (understandably) if _someMapper is mocked
        //end foreach after more stuff
    }

}

  ///...
    [Test]
    public void the_mapper_should_be_called()
    {
        //If mock or stub, then can AssertWasCalled, but then only null object returned.
        // If don't mock, then cannot assert whether was called.
        var mapper = MockRepository.GenerateStub<ISomeMapper>();

        var somethingToMap = _someListOfSomethings[0];

        var sut = new SomeClass(mapper);

        sut.SomeMethod(_someListOfSomethings);

        mapper.AssertWasCalled(x => x.Map(somethingToMap));
    }

1 Ответ

2 голосов
/ 08 января 2010

Вы можете установить для фиктивного объекта ожидание, что метод был вызван вместе с возвращаемым значением:

MappedSomething fakeMappedSomething = //whatever
mapper.Expect(m => m.Map(something)).Return(fakeMappedSomething);
...
sut.SomeMethod(_someListOfSomethings);

Затем проверьте ожидания в конце теста.

...