我正在尝试测试正确加载加载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论坛上发布了这个帖子,但那里的流量看起来很低。
感谢您的帮助! Berryl
答案 0 :(得分:1)
犀牛说明了测试布局的方式,我没有得到我告诉它的电话。下面的测试是测试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)
答案 1 :(得分:0)
我认为它预计有一个电话但没有。但