为什么MSpec中对FakeItEasy对象的MustHaveHappened调用失败?

本文关键字:MustHaveHappened 调用 失败 对象 MSpec 中对 FakeItEasy 为什么 | 更新日期: 2023-09-27 18:04:17

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

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

[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

。在FakeItEasy.Configuration.RuleBuilder中AssertWasCalled(Func 2 callPredicate, String callDescription, Func 2 repeatPredicate, String repeatDescription)。当UnitTests.When_running_Pst_CleanUp.<.ctor>b__2()在When_running_Pst_CleanUp.cs: line 19

为什么MSpec中对FakeItEasy对象的MustHaveHappened调用失败?

这绝对是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的实现,我很乐意帮助你找到正确的东西来测试。

相关文章:
  • 没有找到相关文章