【问题标题】:how to interpret this (rhino) mock unit test failure msg如何解释这个(犀牛)模拟单元测试失败消息
【发布时间】:2009-06-05 00:51:46
【问题描述】:

我正在尝试测试加载 UI 矩阵的方法是否正确加载。测试失败,除非我告诉模拟框架忽略传递的参数,给我以下消息:

Rhino.Mocks.Exceptions.ExpectationViolationException : ITimeSheetMatrixWidget.Load (Smack.ConstructionAdmin.Domain.TransferObjects.TimeSheetDtoAssembler +d__1);预期 #1,实际 #0。

有趣的是,该消息以某种方式接收了对另一个对象的调用,该对象从域模型中组装了 DTO——我不明白!

这里是 Sut 的接口/方法:

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 论坛上发布了这篇文章,但那里的流量看起来非常低。

感谢您的帮助! 浆果

【问题讨论】:

  • 对我来说神秘的是方法的参数(TransferObjects.TimeSheetDtoAssembler +d__1),以及 Rhino 不期望的方法调用部分。 +d_1 是什么意思?

标签: c# unit-testing rhino-mocks


【解决方案1】:

Rhino 是在说明测试的安排方式,我没有接到我告诉它期待的电话。下面的测试是测试 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)

【讨论】:

    【解决方案2】:

    我认为它期待一个电话,但没有接到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 2011-02-15
      • 1970-01-01
      • 2010-11-07
      • 2010-10-29
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多