c# - 如何隐藏 C# 单元测试?

标签 c# visual-studio unit-testing vstest

对于快速实验,我更喜欢使用“单元测试”——即用 [TestMethod] 注释一个(或多个)方法– 使用 Main 方法创建一个小项目。

与小型项目相比,测试方法有一些优势:

  • 编写一个方法并用[TestMethod]注释它会更快而不是创建一个新项目;
  • 测试方法可以使用the visual studio test tools提供的设施例如与类似实验共享的测试装置(通过 [TestInitialize] );
  • 可以通过右键单击并选择“运行测试”来执行该方法(在 visual studio 2015 中); 并且,
  • 使用Assert()而不是通过调试器或通过 Console.WriteLine() 检查值自动记录实验的意图和结果,无需人工干预即可重复进行。

问题是这些实验出现在 visual studio 测试资源管理器中,这会造成困惑,并且难以区分真正的单元测试和实验。 (我没有使用任何其他测试报告工具、CI 等,但我认为问题也会在那里发生。)

有没有办法利用 [TestMethod] 的优势?用于实验并避免它同时造成的困惑?

我尝试了以下方法来解决这个问题:

  • 拥有 [TestClass][TestMethod]属性作为注释并在您想要运行实验时取消注释。

    这就是我目前所做的。它有效,但运行实验有点麻烦。

  • 使用 [Ignore]属性。

    用忽略的测试使测试资源管理器 View 困惑,并需要注释掉 [Ignore]运行测试的属性。

  • 将实验放在不同的项目中;正如 Veverke 所建议的那样或者用 [TestCategory] 注释测试C Sharper 建议的属性.

    Visual Studio 测试资源管理器可以按类别、持续时间、结果、特征、项目对测试进行分组。为了避免困惑:选择 traits 允许保留用 [TestCategory("Experiments")] 注释的测试树。关闭或选择项目允许保持“experiments.proj”树关闭。

    使用分组区分实验和测试时,不能使用测试浏览器中的其他分组。

长话短说

如何编写实验(使用 visual studio 单元测试)而不让实验混淆真实单元测试的报告?

最佳答案

合并答案:

  1. 真的想滥用单元测试作为实验吗? (由 Jamie Rees 发表评论,在 answerC Sharper 发表评论)

    也许 Linqpad ([ https://www.linqpad.net/]) 或类似的东西更适合实验。

  2. 如果您想滥用单元测试,请用 [TestCategory] 标记每个实验方法。 .这允许在测试资源管理器中对实验进行分组并选择要运行的测试。(来自 answer 作者 C Sharper)

  3. 使用构建配置来定义条件编译符号,例如 EXPERIMENTS。使用 #if EXPERIMENTS 启用或禁用实验。使用解决方案构建配置能够从工具栏启用或禁用实验。(来自 answer Kasper van den Berg

例子:

#if EXPERIMENTS
[TestClass]
public class MyExperiment1
{
    [TestMethod, TestCategory("Experiment")]
    public void Method1()
    {
        …
    }
}
#endif

关于c# - 如何隐藏 C# 单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326031/

相关文章:

c# - 在 Windows Azure 上部署时自定义 app.config

c# - 在 C# 中使用时间跨度或表示时间跨度的整数值之间的区别

c# - Entity Framework - ContextBuilder 命名空间

visual-studio-2010 - VSWindowManager 替换 - 需要在 VS2010 窗口与双显示器配置之间切换

asp.net - 仅在发布时找不到类型或命名空间

java - 忽略 Infinitest 中的测试

c# - ServiceController status 没有正确反射(reflect)实际的服务状态

c# - 有没有办法让编译器在非公共(public)类中缺少 XML 注释时发出警告?

c# - 我可以撤消 NSubstitute 的 Returns() 替换而不重新创建模拟吗?

sql - 架构更改脚本 : Validation and test cases