gpt4 book ai didi

visual-studio - 如何抑制或修复未使用 MSpec Behaves_like 字段的 Visual Studio 警告?

转载 作者:行者123 更新时间:2023-12-03 17:33:56 25 4
gpt4 key购买 nike

我正在使用 Behaviors 编写惯用的 MSpec 规范和 Behaves_like字段

[Subject(typeof(IUnitMaskConverter))]
public class When_converting_unit_masks_by_lookup
{
Behaves_like<UnitMaskConverterBehaviors> a_unit_mask_converter;
protected static LookupUnitMaskConverter _converter = new LookupUnitMaskConverter();
}

Visual Studio 显示生成警告
The field 'Specs.UnitMask.When_converting_unit_masks_by_lookup.a_unit_mask_converter' is never used

我已经熟悉 MSpec 的 ReSharper 代码注释,并且我有 MSpec 主题和字段的命名规则。我不知道如何控制未使用字段的此警告。我想避免在项目级别抑制警告,因为它在常规情况下实际上很有用。

最佳答案

我知道这是一个将近两年的问题;但是,看看原始问题的上下文,看起来@Anthony 实际上想在他的测试项目中使用 MSpec。

@bitbonk 和 @mtijn 的两个答案给出了为什么你应该 的重要理由从不在项目级别忽略这些。但是,这两个答案忽略了@Anthony 的初衷,即他正在尝试使用 MSpec。

你看,MSpec 是一个 BDD 框架,它使用大量的委托(delegate)和字段定义来定义你的规范。通常,您有未分配的字段和委托(delegate)。这些会导致警告在 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 的重点是在语法噪音最少的上下文中规范您的整体故事。警告,在你创建了十几个故事之后,每个故事都有十几个规范,让它变得非常嘈杂!

现在,我可以看到人们试图通过说:“嘿,还没有测试,它只是被 stub !警告表明我们需要实现它们。”实际上,MSpec 在运行时已经在输出窗口中以不同的方式呈现这些“ stub ”规范,在测试总数中标记为“已跳过”,并且在其 HTML 输出报告中也非常可爱。换句话说,你不需要警告来对你大喊有未实现的规范,因为运行者已经这样做了。
Behaves_like<T>已经有点奇怪了。但是请注意,就是这样, Behaves_like<T> behaviors 没有更多的实现了到那个。它只是 MSpec 的运行程序使用(所有字段代表)并运行它们的未分配字段。

所以解决方案很简单:对于 MSpec "Specs"测试项目,专门用于 Machine.Specifications 项目,我经常右键单击项目的设置并将这些添加到抑制框:

0169;0649

同样,这仅适用于 MSpec 测试项目(或实际上任何其他 BDD C# 框架,因为它们使用繁重的委托(delegate)和未分配的字段)。对于任何正常的项目,您都不应该这样做。

或者,如果您的团队领导拒绝您为您的测试项目编辑它的权利,您可以继续实现您的规范,增加您最初试图通过使用 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() - 但真的吗?)。但是,如果您不想在项目级别忽略它们,这是一种“实现”每个字段的方法。

关于visual-studio - 如何抑制或修复未使用 MSpec Behaves_like 字段的 Visual Studio 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6958641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com