C# 生成测试:检查文件是否存在于其他项目中
我在我的主项目中有一个位于~/bin/foo/FOO32.EXE的内容文件,它有时会从源代码管理中丢失(人们正在处理.gitignore);这每次都会破坏我们的身材 我决定做一个基本的测试项目,确保文件在需要的地方。作为构建的一部分,测试项目将在我们的竹服务器中运行 我想在我的测试项目中测试该文件是否存在,但路径可能会根据构建配置动态更改(我们构建了32位版本和任意CPU版本,这意味着bin目录可以更改一点) 作为单元测试的一部分,我如何验证该文件是否存在于我的构建项目中?我希望是这样的:C# 生成测试:检查文件是否存在于其他项目中,c#,unit-testing,build,path,msbuild,C#,Unit Testing,Build,Path,Msbuild,我在我的主项目中有一个位于~/bin/foo/FOO32.EXE的内容文件,它有时会从源代码管理中丢失(人们正在处理.gitignore);这每次都会破坏我们的身材 我决定做一个基本的测试项目,确保文件在需要的地方。作为构建的一部分,测试项目将在我们的竹服务器中运行 我想在我的测试项目中测试该文件是否存在,但路径可能会根据构建配置动态更改(我们构建了32位版本和任意CPU版本,这意味着bin目录可以更改一点) 作为单元测试的一部分,我如何验证该文件是否存在于我的构建项目中?我希望是这样的: [T
[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
,这是构建的可执行文件通常所在的位置,尽管您的问题并不清楚它是否是您需要的文件。您不能将文件包含到项目中并让构建操作:无,复制到输出:始终吗?在单元测试中测试文件是否存在通常是一件痛苦的事情,这还取决于您的测试运行人员…@AlexeiLevenkov问题是,我们的开发人员有时会从存储库中删除文件,因此它会被删除(构建过程的第一步是与repo同步)。如果文件不存在,将其设置为“复制到输出”总是没有帮助。我想向删除该文件的开发人员发送一个nastygram,因为他没有注意到,并确定构建无效。可能是预构建事件而不是单元测试@JeremyHolovacs,但由于缺少文件,构建应该失败。。。应该比测试失败更明显。。。