【问题标题】:build tests: check if file exists in another project构建测试:检查文件是否存在于另一个项目中
【发布时间】:2015-07-17 20:03:23
【问题描述】:

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

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

我想在我的测试项目中测试该文件是否存在,但路径可能会根据构建配置动态更改(我们构建一个 32 位版本和一个 Any 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));
}

【问题讨论】:

  • 你不能只将文件包含到项目中并构建操作:无,复制到输出:总是吗?在单元测试中测试文件是否存在通常很痛苦,并且还取决于您的测试运行者...
  • @AlexeiLevenkov 问题是我们的开发人员有时会从存储库中删除文件,因此它会被删除(构建过程的第一步是与存储库同步)。如果文件不存在,将文件设置为复制到输出总是无济于事。我想给删除文件的开发者发一个不注意的讨厌图,并确定构建是无效的。
  • 可能是预构建事件而不是单元测试? dillieodigital.wordpress.com/2012/11/27/…
  • @JeremyHolovacs 但构建应该会因丢失文件而失败...应该比测试失败更明显...

标签: c# unit-testing build path msbuild


【解决方案1】:

正如 cmets 所提到的:这样的测试并不真正属于我所说的单元测试项目的代码。然而,在 msbuild 本身中很容易实现。在项目中放置一个这样的目标来确定你的输出目录是什么:

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

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

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 2012-03-11
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 2020-02-04
    • 2016-05-20
    相关资源
    最近更新 更多