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