Visual Studio和.NET中的测试条件

4
有没有办法做到这一点?
[Conditional("TEST")]
...

或者

#if TEST

#end if

原因是我想将一些测试逻辑封装在库中,而不必将逻辑提取到自己的测试库中。

谢谢!

3个回答

0

听起来你想使用预处理指令(在C#中可用,可能还有其他语言)。具体来说,是在源代码中使用#define和/define编译器选项,以及#if语句。你没有说明你正在使用哪个版本的.NET,但MSDN表明它至少可以回溯到.NET 1.1,至少在Visual Studio 2003中。


0

按照@steenhulthin所述,简单地创建一个新的构建配置,并添加编译符号TEST。

构建配置的名称并不重要,但是您必须设置此配置的条件编译符号以包括TEST(项目设置,页面“构建”IIRC)。您还可以在要使用它的每个文件中定义编译符号,而不是项目设置。(#define TEST


0

是的,这是可能的。

创建一个名为TEST的构建配置并

[Conditional("TEST")]

关于您的方法。

要在Visual Studio中创建构建配置,请转到“生成”菜单 -> 配置管理器。 在“活动解决方案配置:”下选择“新建...”。 给一个名称(在您的情况下为TEST),您可能还想将“从副本设置中复制”设置为Debug。

这也允许您使用:

#if TEST
...
#end if

然而,使用#if会将该部分隐藏在编译器中,根据我的经验,当在不同的构建配置之间切换时,由于重构的代码破坏了其他配置,这是很痛苦的根源。

编辑

@Aaronaught提到条件属性不会起作用。我认为天真的解决方案是使用#if。在这种情况下,您可能需要执行以下操作:

#if TEST
    [TestMethod()]
#endif

在你的测试方法之前加上TestMethod()属性,以避免向编译器隐藏更多东西。

1
这个不起作用。正如在这个问题中所指出的那样:如何让MSTest尊重Conditional属性?,MSTest将无论如何运行测试。 - Aaronaught

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接