2013-03-15 10 views
2

При выполнении следующей проверки все утверждения терпят неудачу. Не могу понять, почему они терпят неудачу, потому что фактическая реализация имеет вызов для объектов.Почему этот MustHaveHappened вызов объекта FakeItEasy не работает в MSpec?

Это известная ошибка? Потому что некоторые другие тесты преуспевают.

[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; 
} 

Утверждение потерпело неудачу для следующего вызова: Outlook.Contracts.IOutlookFolderParameters.get_NotificationsFolder() Прогнозный найти его по крайней мере один раз, но никаких звонков не было сделано поддельного объекта.

на FakeItEasy.Core.FakeAsserter.AssertWasCalled (Func 2 callPredicate, String callDescription, Func 2 repeatPredicate, Строка repeatDescription) при FakeItEasy.Configuration.RuleBuilder.MustHaveHappened (Повторное repeatConstraint) при UnitTests.When_running_Pst_CleanUp. < .ctor> b__2() в When_running_Pst_CleanUp.cs: линия 19

+0

У вас есть ошибка? – Jocke

+0

Просто добавил результат теста. –

+0

На самом деле я не вижу утверждения, чтобы соответствовать ошибке. Я не вижу ожидаемого вызова 'get_NotificationsFolder()' (выглядит как метод, созданный для свойства Auto или что-то еще). Почему вы тестируете, что геттеры называются? Это не может быть должным образом закреплено за вашим поведением. Что означает '_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();' и то на самом деле тестирование чего-то, что должно произойти –