你如何引用ASP.NET" Content"与测试兼容?

时间:2014-08-27 19:50:01

标签: asp.net integration-testing httpcontext server.mappath

如果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(虽然不理想)。

1 个答案:

答案 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;
    }
}