2

运行以下测试时,所有断言都失败。无法弄清楚它们为什么会失败,因为实际的实现确实调用了对象。

这是一个已知的错误?因为其他一些测试确实成功了。

[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, Func2 repeatPredicate, String repeatDescription) 在 FakeItEasy.Configuration.RuleBuilder.MustHaveHappened(Repeated repeatConstraint) 在 UnitTests.When_running_Pst_CleanUp.<.ctor>b__2() 在 When_running_Pst_CleanUp.cs:第 19 行

4

1 回答 1

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我很乐意帮助您找到正确的测试对象。

于 2013-03-25T06:59:43.867 回答