Phpunit 如何测试只检索模板输出的函数?

Phpunit 如何测试只检索模板输出的函数?,phpunit,Phpunit,我有一个模板类,它获取HTML并基本上将HTML返回给调用方。如何使用PHP单元测试调用程序?我是否只是assertTrue(是字符串(调用函数))?这似乎是一个愚蠢的测试,我想我可能测试得不正确。返回的HTML应该是格式正确的吗?如果是这样,您可以验证它 和/或如果始终假定存在某个节点或文本字符串,则可以检查其存在性。使用strpos、正则表达式或适当的DOM解析器 这个StackOverflow问题为您提供了一些解析和查询HTML的方法: 更一般地说,我通常测试返回字符串的函数的方法是: $

我有一个模板类,它获取HTML并基本上将HTML返回给调用方。如何使用PHP单元测试调用程序?我是否只是
assertTrue(是字符串(调用函数))
?这似乎是一个愚蠢的测试,我想我可能测试得不正确。

返回的HTML应该是格式正确的吗?如果是这样,您可以验证它

和/或如果始终假定存在某个节点或文本字符串,则可以检查其存在性。使用strpos、正则表达式或适当的DOM解析器

这个StackOverflow问题为您提供了一些解析和查询HTML的方法:

更一般地说,我通常测试返回字符串的函数的方法是:

$html=call_function();
$this->assertEquals("dummy",$html);
然后它失败了,但告诉我正确的输出,所以我将其粘贴到:

$html=call_function();
$expected=<<<EOD
<html>
...
</html>
EOD;
$this->assertEquals($expected,$html);
加成
如果HTML字符串非常大,另一种方法是使用
md5()
将其缩减为短字符串。当某些东西坏了,这仍然会提醒你,但(大的)缺点是当它坏了,你不知道在哪里。如果您担心这一点,那么最好使用DOM方法(或其可怜的表兄弟regexes)来挑选HTML的几个关键部分进行测试。

我的意思是,测试大量HTML是很奇怪的。假设对于模板引擎,如果我使用模板引擎调用不同的模板并测试这些调用。仅仅为了预期的结果测试而在PHP中包装一大块html会很奇怪吗?@草莓除非你有一个虐待狂老板,否则测试不是一种惩罚,或者你为了它而做的事情:-)你对代码进行了测试,可以想象将来在编写代码时可能会出现问题。模板引擎的输出可以依赖于很多东西,我认为完整的输出通常对测试很有用。如果源代码丑陋是唯一的问题,您可以将
$expected
保存在一个外部文件中,并将其与
file\u get\u contents
一起加载。@草莓我用
md5
建议更新了我的答案,用于非常大的文件,但正如上面提到的,我不建议这样做。
$html=preg_replace('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/','[TIMESTAMP]',$html);