2009-06-05 107 views
0

我想測試加載UI矩陣的方法正在加載正確。如何解釋此(犀牛)模擬單元測試失敗msg

Rhino.Mocks.Exceptions.ExpectationViolationException:除非我告訴模擬框架忽略參數傳遞給我下面的消息,則測試失敗 ITimeSheetMatrixWidget.Load (Smack.ConstructionAdmin.Domain.TransferObjects.TimeSheetDtoAssembler + d__1);預期#1,實際#0。

有趣的是,消息是以某種方式接收對另一個對象的調用,該對象從域模型中組裝DTOs - 我不明白!

下面是接口/方法蘇特是:

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

它的參數是神祕的對我(TransferObjects.TimeSheetDtoAssembler + d__1),而不是由犀牛預期的方法調用的一部分方法。 + d_1是什麼意思? – Berryl 2009-06-05 04:23:41

回答

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(); 
    } 

第一招使用犀牛參數約束條件:

Arg<IEnumerable<DynamicDisplayDto>> 

所述第二特技是使用清單的擴展,而不是被:

List.Equal(dtos) 
0

我認爲它期望一個電話,但沒有得到。