是否有内置方法来确定测试是在dev计算机(在Visual Studio中)还是在构建器上(在MSTest运行程序中)运行?如果没有人找到一个好的解决方案吗?
我正在使用数据驱动的测试,我希望能够使用自制的UI来过滤本地开发机器上的数据源,但我希望构建器能够运行所有测试。
我考虑过#if但这看起来很糟糕。更好的解决方案?
答案 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。