Ant*_*ean 6 mspec visual-studio
我正在使用Behaviors和Behaves_like字段编写惯用的MSpec规范
[Subject(typeof(IUnitMaskConverter))]
public class When_converting_unit_masks_by_lookup
{
Behaves_like<UnitMaskConverterBehaviors> a_unit_mask_converter;
protected static LookupUnitMaskConverter _converter = new LookupUnitMaskConverter();
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio显示构建警告
The field 'Specs.UnitMask.When_converting_unit_masks_by_lookup.a_unit_mask_converter' is never used
Run Code Online (Sandbox Code Playgroud)
我已经熟悉MSpec的ReSharper代码注释,并且我有MSpec主题和字段的命名规则.我不知道如何控制未使用字段的此警告.我想避免在项目级别压制警告,因为它在常规情况下实际上很有用.
我知道这是近两年的问题; 但是,看看原始问题的背景,看起来@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;
}
Run Code Online (Sandbox Code Playgroud)
想猜一下刚刚造成多少警告?事实上,提前规范我们的代码和项目是完全正常的.当BDD指出你的设计时,你不应该被一堆警告惹恼:MSpec的全部意义是在语法噪音最少的情况下指定你的整体故事.警告,创建十几个故事后,每个都有十几个规格,使它非常嘈杂!
现在,我可以看到人们试图证明这些警告的合理性,他说:"嘿,还没有测试,它只是存根!警告使我们需要实现它们." 实际上,MSpec在运行时已经在输出窗口中以不同的方式呈现这些"存根"规范,在测试总数中标记为"已跳过",并且在HTML输出报告中也非常可爱.换句话说,你不需要警告你就没有实现规格,因为跑步者已经这样做了.
这Behaves_like<T>有点奇怪了.但请注意,就是这样,没有更多的实现Behaves_like<T> behaviors.它只是一个未指定的字段,MSpec的跑步者使用(所有字段代表)并运行它们.
所以解决方案很简单:对于专门针对Machine.Specifications项目的MSpec"Specs"测试项目,我经常右键单击项目的设置并将它们添加到Supress框中:
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 =()=> { };
}
Run Code Online (Sandbox Code Playgroud)
这更难看,真正让你脱离了你想要指出的整体BDD故事的焦点.更不用说,你的所有规格都会在没有任何实现的情况下通过(你可以添加更多以使其成为一个难以实现的失败,throw new NotImplementedException()但是严重吗?).但是,如果您不想在项目级别忽略它们,那么这是一种"实现"每个字段的方法.
如果警告有警告编号,您可以通过添加pragma disable/enable来抑制每个类甚至代码行的这些警告。
要抑制“Field XYZ is neverused”的警告,请执行以下操作:
#pragma warning disable 0169
... field declaration
#pragma warning restore 0169
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
800 次 |
| 最近记录: |