【发布时间】:2013-03-25 14:59:43
【问题描述】:
运行以下测试时,所有断言都失败。无法弄清楚它们为什么会失败,因为实际的实现确实有对对象的调用。
这是一个已知的错误吗?因为其他一些测试确实成功了。
[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, Func2repeatPredicate,StringrepeatDescription) 在 FakeItEasy.Configuration.RuleBuilder.MustHaveHappened(Repeated:repeatConstraint) 在 UnitTests.When_running_Pst_CleanUp.<.ctor>b__2() 在 When_Clunning_Pst_ :第 19 行
【问题讨论】:
-
刚刚添加了测试结果。
-
我实际上没有看到与错误匹配的断言。我没有看到调用
get_NotificationsFolder()的期望(看起来像是为自动属性或其他东西生成的方法)。你为什么要测试 getter 被调用?这不能正确地固定你的行为。_processor对那些您可以断言的文件夹做了什么? -
哎呀,你的
_processor也是假的。那是行不通的。它必须是一个真实的实例。 -
_processor 在 pst 中进行实际清理。我测试是否调用了属性,因为这样我可以确定清理中的所有步骤都已经发生......
-
但是你的 _processor 是假的。你实际上并没有在这里测试任何你自己的代码
标签: c# unit-testing mspec fakeiteasy