如何隐藏 C# 单元测试?

How to hide C# unit tests?

对于快速实验,我更喜欢使用 "unit tests" ——即用 [TestMethod] 注释一个(或多个)方法,而不是用 Main 方法创建一个小项目。

一个测试方法比一个小项目有一些优势:

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

有没有一种方法既可以利用 [TestMethod] 进行实验,又可以避免它同时造成的混乱?

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

TL;DR

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

基本上,您将单元测试误用到不适合的地方。 但我想到的唯一解决方案是使用 [TestCategory] 属性来控制测试何时运行以及它应该在哪个列表中。

[TestMethod(), TestCategory("Nightly"), TestCategory("Weekly"), TestCategory("ShoppingCart")]
public void DebitTest()
{

}

可以通过 ifdef 禁用实验,例如:

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

要启用实验,请将 #define EXPERMIMENTS 添加为文件的第一行;然而,这仍然很麻烦。条件编译符号 (EXPERIMENTS) 也可以通过项目属性定义。要对此进行改进,请创建构建配置和解决方案配置,并仅为构建配置定义条件编译符号。

合并答案:

  1. 真的想滥用单元测试作为实验吗? Jamie Rees and in by C Sharper 发表评论)

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

  2. 如果你想滥用单元测试,请用[TestCategory]. This allows grouping the experiments in the test explorer and selecting which tests to run.(From by C Sharper)

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

示例:

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