как интерпретировать этот (носорог) фиктивный провал модульного теста MSG - PullRequest
0 голосов
/ 05 июня 2009

Я пытаюсь проверить, правильно ли загружается метод загрузки матрицы пользовательского интерфейса. Тест не пройден, если я не скажу фиктивной структуре игнорировать переданный аргумент, выдав мне следующее сообщение:

Rhino.Mocks.Exceptions.ExpectationViolationException: ITimeSheetMatrixWidget.Load (Smack.ConstructionAdmin.Domain.TransferObjects.TimeSheetDtoAssembler + D__1); Ожидаемый # 1, фактический # 0.

Что интересно, так это то, что сообщение каким-то образом принимает вызов, сделанный другому объекту, который собирает DTO из модели домена - я не понимаю!

Вот интерфейс / метод Сут:

public interface ITimeSheetMatrixWidget : IMatrixWidget {
    .....
    void Load(IEnumerable<DynamicDisplayDto>activities);
    .....

}

А вот и тест:

[Test]
public void SettingTheWidget_TriggersLoad_NonProjectActivities() {
        var f = _getFacade();
        // create test activities
        TestDataFactory.SetupTestActivities(f);
        Assert.That(f.NonProjectDtos.Count(), Is.GreaterThan(0));

        // create the presenter
        var filterService = MockRepository.GenerateStub<IProjectFilterService>();
        var view = MockRepository.GenerateStub<ITimeSheetView>();
        var timeSheetPresenter = new TimeSheetPresenter(f, filterService, view);

        // inject the mocked widget & trigger the Load
        var widget = MockRepository.GenerateMock<ITimeSheetMatrixWidget>();
        timeSheetPresenter.ActivityMatrix = widget;

        widget.AssertWasCalled(x => x.Load(f.NonProjectDtos), 
            mo =>mo.IgnoreArguments()); <-- ok, but not useful
        //widget.AssertWasCalled(x => x.Load(f.NonProjectDtos)); <-- generates the Exception
    }

Может кто-нибудь объяснить сообщение об ошибке?

Кроме того, сегодня утром я опубликовал это на форуме Rhino Mocks, но трафик там выглядит очень низким.

Спасибо за вашу помощь! Berryl

Ответы [ 2 ]

1 голос
/ 06 июля 2009

Носорог констатировал тот факт, что при проведении теста у меня не было звонка, который я сказал, чтобы он ожидал. Приведенный ниже тест является эффективным способом проверки аргумента IEnumerable:

[Test]
public void ProjectMatrix_Injection_IsLoaded()
    {
        _projectMatrix = MockRepository.GenerateMock<ITimeSheetMatrixWidget>();

        var dtos = _facade.ProjectDtos;
        _projectMatrix.Expect(x => x.Load(Arg<IEnumerable<DynamicDisplayDto>>.List.Equal(dtos))).Return(dtos.Count());

        new MatrixEntryService(_facade, _projectMatrix, _nonProjectMatrix, _totalMatrix);

        _projectMatrix.VerifyAllExpectations();
    }

Первый трюк использует ограничения аргумента Rhino:

Arg<IEnumerable<DynamicDisplayDto>>

Второй прием - использовать расширение List вместо Is:

List.Equal(dtos)
0 голосов
/ 05 июня 2009

Я думаю, он ожидал одного звонка, но не получил ни одного.

...