对于快速实验,我更喜欢使用“单元测试”——即用 [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 单元测试)而不让实验混淆真实单元测试的报告?
最佳答案
合并答案:
您真的想滥用单元测试作为实验吗? (由 Jamie Rees 发表评论,在 answer 由 C Sharper 发表评论)
也许 Linqpad ([ https://www.linqpad.net/]) 或类似的东西更适合实验。
如果您想滥用单元测试,请用
[TestCategory]
标记每个实验方法。 .这允许在测试资源管理器中对实验进行分组并选择要运行的测试。(来自 answer 作者 C Sharper)使用构建配置来定义条件编译符号,例如
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/