对于快速实验,我更喜欢使用“单元测试” -i.e。使用[TestMethod]
- 注释一个(或多个)方法,而不是使用Main
方法创建一个小项目。
测试方法比小项目有一些优势:
[TestMethod]
注释它比创建新项目更快; [TestInitialize]
); Assert()
代替通过调试器检查值或通过Console.WriteLine()
自动记录实验的意图和结果,并使其可重复,无需人工干预。问题是这些实验出现在视觉工作室测试资源管理器中,这会导致混乱,并且难以将实际单元测试与实验区分开来。 (我没有使用任何其他测试报告工具,CI等,但我认为问题也会在那里发生。)
有没有办法利用[TestMethod]
进行实验并避免同时造成的混乱?
我尝试了以下方法来解决这个问题:
将[TestClass]
和[TestMethod]
属性作为注释,并在您想要运行实验时取消注释。
这就是我目前所做的。它有效,但运行实验有点麻烦。
使用[Ignore]
属性。
使用忽略的测试将测试资源管理器视图混乱,并要求注释掉[Ignore]
属性以运行测试。
将实验放在不同的项目中;根据{{3}}的建议,或使用Veverke建议的[TestCategory]
属性对测试进行注释。
视觉工作室测试资源管理器可以按类别,持续时间,结果,特征,项目对测试进行分组。为了避免混乱:选择 traits 可以保持注释C Sharper关闭的测试树,或者选择项目,可以保持“experiments.proj”树的关闭状态。
使用分组将实验与测试区分开来时,不能使用测试资源管理器中的其他分组。
如何在没有实验的情况下编写实验(使用视觉工作室单元测试),使实际单元测试的报告变得混乱?
答案 0 :(得分:3)
结合答案:
您真的想要滥用单元测试作为实验吗? (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
答案 1 :(得分:2)
基本上,您滥用单元测试以获取其无意的内容。
但是我想到的唯一解决方案是使用[TestCategory]
属性来控制测试运行的时间以及应该在哪个列表中。
[TestMethod(), TestCategory("Nightly"), TestCategory("Weekly"), TestCategory("ShoppingCart")]
public void DebitTest()
{
}
答案 2 :(得分:1)
可以通过ifdef禁用实验,例如:
#if EXPERIMENTS
[TestClass]
public class MyExperiment1
{
[TestMethod]
public void Method1()
{
…
}
}
#endif
要启用实验,请将#define EXPERMIMENTS
添加为文件的第一行;然而,这仍然很麻烦。条件编译符号(EXPERIMENTS
)也可以通过项目属性定义。要改进这一点,请创建构建配置和解决方案配置,并仅为构建配置定义条件编译符号。