我有很多集成测试可以读取文件的预期结果。我的测试通过相对路径访问这些文件。相对路径是x86与任何CPU的不同深度级别。例如,当我的测试在x86下运行时,他们需要读取以下文件“../../TestResults/MyTest.csv”,但在任何CPU下他们需要访问“../ TestResults / MyTest.csv”< / p>
到目前为止,我在每个测试夹具中都有以下常量:
private const string platformDependentPrefix = "";
如果我运行x86的测试,我需要在每个测试夹具中手动将“”更改为“../”。
有没有办法实现自动化?
答案 0 :(得分:5)
非常hacky方式,但有效:
public static string Platform
{
get
{
if (IntPtr.Size == 8)
return "x64";
else
return "x86";
}
}
您也可以访问CSharpProjectConfigurationProperties3.PlatformTarget
属性。
答案 1 :(得分:4)
您是否希望进程是以64位还是以编译为目标运行?
如果你想要进程位,那么你可以使用Teoman提到的IntPtr.Size方法(如果你使用的是.NET 4,则使用Environment.Is64BitProcess)。
如果你想要目标平台,我会在System.Reflection命名空间中查看Module.GetPEKind。 PortableExecutableKinds out参数将具有不同的值,具体取决于您是否分别使用Required32Bit标志,无标志,PE32Plus标志设置x86,AnyCPU或x64。
答案 2 :(得分:3)
您可以使用IntPtr.Size检测当前进程运行的“位数”。您将获得4个字节(32位)或8个字节(64位)。没有正在运行作为任何CPU,但你可以为该配置提供#defines,允许你在编译时做出决定。
答案 3 :(得分:3)
在X86中构建时,可以向项目添加条件编译符号(Project-&gt; Properties-&gt; Build),并使用它来确定路径。
离。
#if X86
path = "x86 path";
#endif
除此之外,您可能还想创建一个基本测试类,使用此路径的所有测试都继承自该测试类。在此基类中,您将使用编译符号。这样你实际上只需要定义一次路径。