我知道这是一个将近两年的问题;但是,看看原始问题的上下文,看起来@Anthony 实际上想在他的测试项目中使用 MSpec。
@bitbonk 和 @mtijn 的两个答案给出了为什么你永远不应该在项目级别忽略这些的充分理由。但是,这两个答案忽略了@Anthony 的初衷,即他正在尝试使用 MSpec。
你看,MSpec 是一个 BDD 框架,它使用大量的委托和字段定义来定义你的规范。通常,您有未分配的字段和委托。这些会导致警告在 VS 中像疯了一样飞,特别是如果你有 StyleCop 和其他自动化工具来控制开发人员。
[Subject(typeof(PostService), "when_calling_Save()"]
class with_a_valid_Post_object
{
It should_save_to_repository;
It should_update_post_counter;
Behaves_like<Normal_Behaviors> a_PostService;
}
想猜猜刚刚引起了多少警告?事实上,提前指定我们的代码和项目是完全正常的。在 BDD 规范您的设计时,您不应该被大量的警告所困扰:MSpec 的全部意义在于在语法噪音最少的上下文中规范您的整体故事。警告,在你创建了十几个故事之后,每个故事都有十几个规格,让它变得非常嘈杂!
现在,我可以看到人们试图通过说:“嘿,还没有测试,它只是被存根!警告表明我们需要实施它们。” 实际上,MSpec 在运行时已经在输出窗口中以不同的方式呈现这些“存根”规范,在测试总数中标记为“已跳过”,并且在其 HTML 输出报告中也非常可爱。换句话说,你不需要警告来对你大喊有未实现的规范,因为跑步者已经这样做了。
Behaves_like<T>
已经有点奇怪了。但请注意,就是这样,没有更多的实现Behaves_like<T> behaviors
。它只是 MSpec 的运行程序使用(所有字段代表)并运行它们的未分配字段。
所以解决方案很简单:对于 MSpec "Specs" 测试项目,专门用于 Machine.Specifications 项目,我经常右键单击项目的设置并将这些添加到抑制框:
0169;0649
同样,这仅适用于 MSpec 测试项目(或实际上任何其他 BDD C# 框架,因为它们使用繁重的委托和未分配的字段)。对于任何正常的项目,您都不应该这样做。
或者,如果您的团队领导拒绝您为您的测试项目编辑它的权利,您可以继续实施您的规范,增加您最初试图通过使用 MSpec 避免的同步噪音(责备您的团队通过“上下文切换”让您的生活变得更加困难!)。
[Subject(typeof(PostService), "when_calling_Save()"]
class with_a_valid_Post_object
{
It should_save_to_repository =()=> { };
It should_update_post_counter =()=> { };
Behaves_like<Normal_Behaviors> a_PostService =()=> { };
}
这更难看,并且确实使您脱离了您试图指明的整个 BDD 故事的焦点。更不用说,您的所有规范现在都将通过而没有任何实现(您可以添加更多以使其成为硬失败,throw new NotImplementedException()
但认真吗?)。但是,如果您不想在项目级别忽略它们,这是一种“实施”每个字段的方法。