你如何单元测试模板代码?

时间:2009-08-27 17:33:33

标签: unit-testing language-agnostic templates tdd

例如,我有一段代码从这个模板生成一个SQL * Loader控件文件(使用Python):

template = """
LOAD DATA
INFILE '%(file_path)s'
APPEND
INTO TABLE %(table_name)s
FIELDS TERMINATED BY "%(delimiter)"
OPTIONALLY ENCLOSED BY ""
(\n%(column_specifications)s\n)
"""

我只能通过两种方式对其进行单元测试:

  1. 提出输入,弄清楚输出应该是什么样子,然后声明输出等于那个。
  2. 测试应该在文件中的某些字符串是否在文件中。
  3. 对我来说,这些测试代表两种不同的极端。第一种技术看起来非常脆弱,因为如果我做了很多更改空白,我必须更新测试。第二种技术似乎几乎没用,因为它并没有真正测试文本是否在正确的位置。这里有什么样的快乐媒介能让我的考试变得简单吗?

3 个答案:

答案 0 :(得分:1)

就我个人而言,如果有人在一旦工作后改变这一点的可能性很低,我认为我会对选项#1感到满意。

然而,如果空白的东西让你烦恼,你总是可以从消费者的角度来测试。看来你正在构建类似于SQL的查询,所以在测试数据库上运行测试输入文件并验证记录计数(或内容)是否与预期值匹配。

答案 1 :(得分:1)

如果你想测试模板的作用,#1。这是最容易编写和准确的。如果你发现它很脆弱,你可以快速重写为#2(但是没有必要预先做到这一点)。

如果你想测试SQL,你确实需要一些超出单元测试的东西,使用简化的数据库夹具并实际执行SQL。它会比单元测试慢,但可能不会特别慢。

答案 2 :(得分:1)

我想提交你根本不应该写这个测试。

根据我的经验,单元测试是关于确保程序实际完成它应该做的事情。除非您实际编写了模板代码,否则您不必测试模板是否正常运行。相反,确保输入的值是正确的值,并测试正确的数据是否在DB中正确加载。毕竟这是代码的最终目标,而不是生成适当的SQL字符串。