全部: 我有一个单元测试,它正在测试需要输入文件的功能。此测试是使用VS 2008的内置单元测试功能构建的。
我的问题是单元测试需要发现文件。但是,当测试运行时,它将从测试结果文件夹下的临时“输出”目录运行。它无法找到我的输入文件。
我已将文件添加到单元测试项目中,编译操作为“none”,复制到输出目录选项为“copy if newer”,但副本发生在正常的VS输出目录中(在bin下) ),而不是单元测试执行目录,因此找不到该文件。我不想硬编码文件的路径,因为测试应该为任何检查单元测试的人运行。我可以将输入文件放在一个解决方案文件夹中,让测试代码通过硬编码一个相对路径备份树来“发现”该文件,但我认为这必须是一个常见问题,所以我想检查一下失踪了。
答案 0 :(得分:5)
您可以使用DeploymentItem属性执行此操作。有很多与此相关的警告:
http://www.ademiller.com/blogs/tech/2007/10/gotchas-mstests-deploymentitem-attribute/
或者,您可以将文件添加为资源并从那里读取。这就是我通常做的事情。
答案 1 :(得分:4)
将文件作为资源添加到测试程序集中。然后,您可以在运行时通过测试设置中的Assembly.GetManifestResourceStream加载它。
这是我用来加载资源的便捷方法:
public static class ResLoader
{
public static string AsString<T>(string resName)
{
using (var reader = new StreamReader(Assembly.GetAssembly(typeof(T))
.GetManifestResourceStream(resName)))
{
return reader.ReadToEnd();
}
}
}
T是测试程序集中包含的任何类。
答案 2 :(得分:3)
我通常模拟文件和数据库结果等外部资源,而不是尝试在单元测试中访问它们。这并不总是那么容易。也许如果你向我们展示有问题的方法,我们可以帮助你让它更具单元可测试性。