rka*_*ano 4 c# unit-testing compiler-options visual-studio vs-unit-testing-framework
我正在使用Microsoft.QualityTools.Testing.Fakes来模拟一些单元测试.
但此程序集仅适用于使用VisualStudio Ultimate的用户.
具有其他版本(专业版)的用户无法构建和运行此测试项目,并且在其环境中出现错误.
所以我创建了一个编译器指令来处理这个问题:
#define Ultimate
#if Ultimate
using Microsoft.QualityTools.Testing.Fakes;
#endif
Run Code Online (Sandbox Code Playgroud)
我的测试方法是:
#if Ultimate
using (ShimsContext.Create())
{
... My code
}
#else
Assert.Inconclusive("This test needs VS Ultimate to run");
#endif
Run Code Online (Sandbox Code Playgroud)
这很有效,但用户仍需要注释/取消注释定义行.
那么,有没有办法将我的VS版传递给编译器?或者还有另一种方法吗?
在文本编辑器中打开csproj,在最后一次<PropertyGroup>添加之后:
<PropertyGroup Condition=" $(VisualStudioEdition.Contains('Ultimate')) ">
<DefineConstants>$(DefineConstants);ULTIMATE</DefineConstants>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
请注意,我已将所有常量写成大写,因此您必须将代码更改为:
#if ULTIMATE
Run Code Online (Sandbox Code Playgroud)
如果您希望自己面向未来,正如@Damian建议的那样:
<PropertyGroup Condition=" $(VisualStudioEdition.Contains('Ultimate')) Or $(VisualStudioEdition.Contains('Enterprise')) ">
<DefineConstants>$(DefineConstants);ULTIMATE</DefineConstants>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
请注意,正如@Uwe所写,这些都是"黑客攻击"...手动编辑csproj是生活危险的生活:-)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |