如果ASP.NET项目的结构中有一些文件将 Content 列为 Build Action ,那么如何以一种有效的方式引用该内容IIS和Visual Studio的测试套件都可用吗?
我们过去/现有的做法是使用Server.MapPath()
:
String filename = HttpContext.Current.Server.MapPath("/common/template_1.txt");
然而,这在测试期间失败了。测试运行员没有HttpContext
。
是否有一种机制可以引用/common/template_1.txt
,无论是否有HttpContext
都可以使用?或者我们是否需要制作HttpContext
?
如果我们需要将 Content 项目复制到测试中,那就OK(虽然不理想)。
答案 0 :(得分:0)
您的测试可能在您的Web项目之外的另一个项目中,因此可以从测试项目导航到Web项目中的子目录。
另一种解决方案是将您的HttpContext.Current.Server.MapPath
号召唤到您在测试中调用的类之外。然后将文件名(或文件内容)作为方法参数或通过类构造函数注入。然后,您将能够在测试中发送假文件名。
如果您需要在测试中使用文件内容,那么一个好的解决方案是将文件复制为@MikeMiller建议的嵌入式资源,然后您可以通过以下代码阅读:
private string GetEmbeddedFileResource()
{
var assembly = Assembly.GetExecutingAssembly();
const string resourceName = "TestProjectNamespace.TestFileFolder.template_1.txt";
var stream = assembly.GetManifestResourceStream(resourceName);
if (stream == null) return string.Empty;
using (var reader = new StreamReader(stream))
{
var result = reader.ReadToEnd();
return result;
}
}