我们正在使用 Handlebars.net 在我们的 asp.net Web 应用程序中启用模板。我们在数据库中提供用户可定制的模板,以及开发人员创建并通过网络上的文件系统提供的“罐装”模板。为了确保我们的预制模板正确呈现,我想用 MSTest 单元测试来测试它们。
如何确保在同一解决方案的单独测试项目中使用 MSTest 加载来自网站的相同文件?
我们正在使用 Handlebars.net 在我们的 asp.net Web 应用程序中启用模板。我们在数据库中提供用户可定制的模板,以及开发人员创建并通过网络上的文件系统提供的“罐装”模板。为了确保我们的预制模板正确呈现,我想用 MSTest 单元测试来测试它们。
如何确保在同一解决方案的单独测试项目中使用 MSTest 加载来自网站的相同文件?
这是加载您的 HandleBars 模板并用数据填充它们的代码:
var htmlTemplateStr = //Open your "Canned Template" and load it into this string
var LoadedTemplate = Handlebars.Compile(htmlTemplateStr);
var contextObject = //create an object that will hold all the variables your
// template will be looking for
var outputHtml = LoadedTemplate(contextJson);
将此代码封装到自己的项目中。让包含您的 Web 代码的项目和包含您的测试的项目都引用此项目,以生成把手栏 HTML。现在,您可以确保您的 Web 代码和测试套件使用相同的模板文件。有关更多详细信息,请参阅下面的此答案的评论。
更新 09/06
在您的第三个项目中,您可以将“罐装模板”HTML 文件添加为项目资源。查看链接了解详情。我的团队将其“构建操作”设置为“嵌入式资源”(因此它嵌入到编译的 dll 中),并将其“复制到输出目录”设置为“不复制”(不应该复制任何内容,因为它将被嵌入到 dll 中。)
将预制模板 HTML 文件作为资源添加到您的项目后,您可以使用以下函数检索 HTML:
private string GetCannedTemplateHtml(string resourceFilename)
{
Assembly assem = this.GetType().Assembly;
using(Stream stream = assem.GetManifestResourceStream(resourceFilename))
{
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}