构建测试:检查文件是否存在于另一个项目中

build tests: check if file exists in another project

我的主项目中有一个位于 ~/bin/foo/FOO32.EXE 的内容文件,有时会从源代码管理中删除(人们正在搞乱 .gitignore);这每次都会破坏我们的构建。

我决定制作一个基本的测试项目,以确保文件位于需要的位置。作为构建的一部分,测试项目将 运行 在我们的 bamboo 服务器中。

我想在我的测试项目中测试该文件是否存在,但路径可能会根据构建配置动态更改(我们构建了一个 32 位版本和一个任何 CPU 版本,这意味着bin目录可以稍微改变)

作为单元测试的一部分,我如何验证该文件是否存在于我构建的项目中?我希望它是这样的:

[TestMethod]
public void BbqExeExists()
{
    var basePath = ??? some expression that gets the main project's app directory
    var basefilePath = @"foo/FOO32.EXE";
    var fullPath = Path.Combine(basePath, basefilePath);

    Assert.IsTrue(File.Exists(fullPath));
}

正如评论中提到的那样:此类测试实际上不属于我要说的单元测试项目的代码。然而,在 msbuild 本身中实现起来相当容易。在确定输出目录的项目中放置这样的目标:

<Target Name="BbqExeExists" BeforeTargets="Build">
  <Error Condition="!Exists('$(TargetDir)/foo/FOO32.EXE')" Text="FRequired file missing"/>
</Target>

由于 BeforeTargets 属性,它将 运行 在构建的其余部分之前。我还使用了 TargetDir,这是构建的可执行文件通常所在的位置,尽管从你的问题中并不清楚它是否是你需要的。