0

给定一个 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项复制到测试中,那没关系(虽然不理想)。

4

1 回答 1

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;
    }
}
于 2014-08-27T20:42:16.743 回答