如何为Web和单元测试提供自定义内容模板?

时间:2016-08-23 18:03:23

标签: unit-testing mstest handlebars.net

我们正在使用Handlebars.net在我们的asp.net Web应用程序中启用模板化。我们在数据库中提供用户可自定义的模板以及"罐装"开发人员通过Web上的文件系统创建和提供的模板。为了确保我们的预制模板正确呈现,我想用MSTest单元测试来测试它们。

如何确保在同一解决方案中的单独测试项目中使用MSTest加载网站中的同一文件?

1 个答案:

答案 0 :(得分:0)

这是加载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文件添加为project resource。查看链接了解详情。我的团队将其“Build Action”设置为“Embedded Resource”(因此它嵌入到已编译的dll中),并将其“Copy To Output Directory”设置为“Do not Copy”(不应复制任何内容,因为它将嵌入到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();
        }
    }
}