MSTest - 确定或指定测试是否在开发框或构建器上运行的最佳方法

时间:2010-08-10 20:54:16

标签: c# mstest

是否有内置方法来确定测试是在dev计算机(在Visual Studio中)还是在构建器上(在MSTest运行程序中)运行?如果没有人找到一个好的解决方案吗?

我正在使用数据驱动的测试,我希望能够使用自制的UI来过滤本地开发机器上的数据源,但我希望构建器能够运行所有测试。

我考虑过#if但这看起来很糟糕。更好的解决方案?

4 个答案:

答案 0 :(得分:3)

我成功使用环境变量条件编译。 MSBuild可以轻松地将环境变量转换为可在代码中使用的预处理程序符号。您的MSBuild文件必须包含以下翻译:

<PropertyGroup Condition="'$(ENVIRONMENT_VARIABLE)' != '' ">
    <DefineConstants>$(DefineConstants);ENVIRONMENT_VARIABLE</DefineConstants>
</PropertyGroup>

这段剪辑的作用是检查是否存在ENVIRONMENT_VARIABLE,然后将该变量附加到现有的DefineConstants列表中,该列表向MSBuild指示要为编译定义哪些符号。

仅在构建服务器上定义环境变量/或仅在开发箱上定义环境变量(取决于更容易),这是实现简单配置的非常精简和灵活的方式。如果您需要更高级的策略,配置文件可能是最佳选择。 但是小心引入不同的构建组合,通常会产生大量开销并引入机会以意外打破构建。

只要你可以,就避免它。

答案 1 :(得分:2)

当我不得不在构建机器上进行单元测试时表现不同而不是dev机器时,我最终使用Environment.MachineName来确定机器是否是构建服务器。不知道这对你有用吗。

无论你做什么,我都要确保记录完整,以便你的同事了解它。

答案 2 :(得分:1)

您可以在开发框中使用任何数量的本地设置,这些设置将不会出现在官方版本或测试框中,并阅读这些设置以确定是否需要切换到特定于开发框的行为。例如,文件,XML文件,注册表项,预处理程序指令(如您所述)。

正如Robert Harvey所说,应用程序设置是另一种方法。

答案 3 :(得分:0)

您可以使用application setting