2013-03-15 5 views
2

다음 테스트를 실행하면 모든 어설 션이 실패합니다. 실제 구현에는 객체에 대한 호출이 있기 때문에 실패한 이유를 파악할 수 없습니다.FakeItEasy 개체에서이 MustHaveHappened 호출이 MSpec에서 실패하는 이유는 무엇입니까?

알려진 버그입니까? 다른 테스트가 성공하기 때문입니다. 적어도 한 번 이상 찾을 것으로 예상 Outlook.Contracts.IOutlookFolderParameters.get_NotificationsFolder을()하지만 호출은 가짜 객체에 이루어지지했다 :

[Subject("Pst Cleanup")] 
public class When_running_Pst_CleanUp 
{ 
    Establish context =() => 
    { 
     _folders = A.Fake<IOutlookFolderParameters>(); 
     _processor = A.Fake<IOutlookPstCleaner>(); 
    }; 

    Because of =() => _processor.Cleanup(_folders); 

    It should_cleanup_the_mail_folder =() => A.CallTo(() => _folders.EmailFolder).MustHaveHappened(); 
    It should_cleanup_tasks_folder =() => A.CallTo(() => _folders.TaskFolder).MustHaveHappened(); 
    It should_cleanup_appointments_folder =() => A.CallTo(() => _folders.AppointmentFolder).MustHaveHappened(); 

    private static IOutlookPstCleaner _processor; 
    private static IOutlookFolderParameters _folders; 
} 

어설 다음 호출에 실패했습니다.

FakeItEasy.Core.FakeAsserter.AssertWasCalled에서 (Func을 2 callPredicate, String callDescription, Func 2 repeatPredicate 문자열 repeatDescription)에서 FakeItEasy.Configuration.RuleBuilder.MustHaveHappened (repeatConstraint 반복)에서 UnitTests.When_running_Pst_CleanUp. When_running_Pst_CleanUp.cs에 < .ctor> b__2는() : 라인 (19)

+0

오류가 있습니까? – Jocke

+0

테스트 결과를 추가했습니다. –

+0

오류와 일치하는 어설 션이 실제로 표시되지 않습니다. 'get_NotificationsFolder()'(자동 속성이나 뭔가를 위해 생성 된 메소드처럼 보입니다)를 호출 할 것으로 기대가 없습니다. 왜 getter가 호출되는지 테스트하고 있습니까? 그게 네 행동을 제대로 고정시킬 수는 없어. '_processor' _do_는 당신이 대신 주장 할 수있는 폴더들에 대해 무엇을합니까? –

답변

3

이 FakeItEasy 절대적 올바른 동작이다. 테스트를 성공적으로 수행하려면 IOutlookPstCleaner에 대한 실제 구현을 사용해야합니다. 항상 올바른 것을 속여서 실수로 SUT를 가짜로 만들지 않도록하십시오.

방금 ​​호출 된 속성에 대한 테스트를 통해 아무 것도 테스트하지 않아도됩니다. 나뿐만 아니라 단지 IOutlookPstCleaner이 구현을 쓸 수 및 테스트가 성공합니다 :

public class Cleaner : IOutlookPstCleaner 
{ 
    public void Cleanup(IOutlookFolderParameters folders) 
    { 
     var email = folders.EmailFolder; 
     var task = folders.TaskFolder; 
     var appointment = folders.AppointmentFolder; 
    } 
} 

당신은 내가 테스트 할 수있는 권리 물건을 찾을 수 있도록 도와 드리겠습니다 IOutlookPstCleaner의 구현을 게시합니다.

+0

+1이다.'_processor = A.Fake ();'를'_processor = new OutlookPstCleaner();'로 바꾸면된다. 실제로 일어날 일을 실제로 테스트합니다. –

관련 문제