gpt4 book ai didi

java - 检查 Freemarker 模板是否存在常见错误的有效方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:33:01 24 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




我们一直遇到模板错误偶尔潜入我们的生产站点的问题。如果有一种工具可以捕获这些问题或有一种策略可以提前捕获这些问题,那么它可以添加到交付管道中。

最佳答案

根据我的经验,Freemarker 在尝试渲染模板时实际上只有两类错误(忽略配置):

  • 模板级别的简单语法错误
  • Java层面传入的模型假设不正确

  • 尽管 lint 工具通常确实会发现代码中的错误,但 lint 工具并不能取代基本测试的需要,对于您在这里遇到的情况,这是一个更好的解决方案,因为您在生产代码中看到了异常。

    无论好坏,Freemarker 对谁在处理数据以及谁在处理标记的假设是不同的人具有不同的技能。假设是这种情况(并且您有 Java 工程资源可用),那么从测试过程的角度来看,您有两种方法可以解决这个问题(虽然要真正严谨,但您两者都想要)。

    前端测试

    在我之前的工作中,我们单独使用了这种方法。基本上,前端工程师会在特殊的 Web 前端上破解模板,其中编辑过的模板直接位于包含两个列表的配置路径上:
  • 要渲染的模板
  • 要呈现的数据模型的版本

  • “版本”本质上是一组两层的硬编码 Java 对象,其中第 1 层在所有模板中保持一致,第 2 层是特定于模板的变体。因为我们的大多数电子邮件都是帐户级别的通知,所以我们仅仅拥有全局数据模型就获得了很多里程和重用,而且我们很少需要深入研究小东西。

    福利
  • 前端工程师永远不需要接触 Java,因此如果您的团队中有这样的人,您可以将您的 HTML/CSS 专家用于他们的预期目的
  • 后端工程师可以根据模板及其构造回收很多东西
  • 当引用诸如“帐户”之类的常用值时,松散地强制统一数据模型变量名称(前端工程师会因为他们预期的值不存在而感到恼火,因为不同的后端工程师将某些东西命名为“不正确”)

  • 不太好
  • 这基本上是手动测试,在某些时候将无法捕获错误

  • 后端测试

    另一种选择是在每个模板创建时对它们进行表单单元测试。因为 Freemarker 中的异常都是在编译时发生的,所以您只需要执行以下操作(在您进行初始设置之后):
    Template temp = cfg.getTemplate("myTestedTemplate.ftl");
    temp.process(myTestDataModel, myIgnoredOutput); // No exceptions -> OK for us

    请注意,在这种情况下您不关心结果,您只需要编译它。这很重要,因为您很容易陷入调试 Java 编译输出的泥潭,而无法解决当前问题。和以前一样,您也很可能希望在这里进行相同的两层单元测试:
  • 使用一些通用模型对所有模板进行冒烟测试(获取每个模板可能以编程方式完成)
  • 使用您期望的数据模型变化(缺少设置、不完整的字段等)测试各个模板

  • 福利
  • 构建/部署过程的一部分,因此您可以消除模板中的人为错误
  • 根据您使用 Freemarker 的方式,如果您还没有这样做的话,这也可以验证其他进程是否正确生成了数据模型

  • 不太好
  • 前端工程师需要阅读堆栈跟踪以找出失败的原因
  • 使用这种方法的开发最终会与您的构建过程联系在一起,这远不及重新加载页面


  • 如果您有时间同时做这两件事,我建议您使用单元测试来处理边缘情况和您在弹出时发现的其他问题,然后使用 Web 前端进行开发,以便开发页面不需要重新编译.版本前端的能力非常有益,但目标是首先防止生产中的错误到构建过程。启动,然后优化等等。

    关于java - 检查 Freemarker 模板是否存在常见错误的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9091207/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com