HTML输出的单元测试?

Kri*_*ina 15 html php templates unit-testing

这可能是一个愚蠢的问题,但你是否对PHP函数/脚本的HTML输出进行了单元测试?

我尝试将我的HTML和我的PHP分开 - 即HTML包含占位符,以及某些重复元素的功能(表格数据/任何类型的循环输出) - 但我不确定如何验证这一点.

是否有一种标准的方法可以解决这些问题,或者主要是在创建插入内容的函数上使用常规单元测试,然后确保它在浏览器/ W3C验证器中看起来正确?

谢谢.

编辑:我想这是一个必然结果:这些单元测试是否值得拥有?如果你保持你的内容和结构正确分开,那么你真的只会在非常有限的场景中测试一些包含(无论如何).半手工制作整页只是为了比较文件是否真的值得?

Per*_*ian 10

根据我测试HTML的经验,我现在遵循以下三个基本规则:

1.不要针对正确的模板测试HTML输出. 您将经常修改输出的HTML,最终会浪费时间维护测试.

2.检查生成的HTML中是否存在重要数据. 如果您正在生成HTML(而不是您曾编写过的静态HTML),请测试生成的HTML以获取重要数据.例如:如果您正在基于二维数组生成表,请检查数组中的值是否在生成的HTML中的某处找到.不要费心去验证完整的输出,因为这会违反#1.

3.验证输出是否是正确的HTML. 验证所有输出是否正确HTML以避免愚蠢的错误,例如缺少结束标记.我为此编写了一个库,可以完全免费使用.

此PHP库将允许您验证字符串是否是有效的HTML5.该库使用Validator.nu.与PHPUnit或任何其他测试框架兼容.

在此下载和记录.

易于使用,例如:

$validator=new HTML5Validate();

// Validate (returns TRUE or FALSE)
$result=$validator->Assert('<p>Hello World</p>'); 

// Get explanation of what's wrong (if validation failed)
print $validator->message; 
Run Code Online (Sandbox Code Playgroud)


Gut*_*ter 5

对HTML输出的测试将被视为覆盖测试.最初,当我开始使用PHP时,我正在创建这些测试,但随着时间的推移,我发现这些测试并没有真正有用.

如果有一两件事,我知道,这是演示文稿会改变很多,从最初开发到部署.

如果你考虑一下,for循环真的不是逻辑,而是等距转换函数,如果你遵循Separation of Concerns,那么你通过某种方法将数据传递给for循环.我建议测试for循环获取正确的数据,但不测试for循环的输出.

如果你发现自己重复生成表格,那么一定要开始单元测试那些表格模板.但是再一次,您会发现这些模板会发生很多变化.

此时,您应该考虑将迭代与HTML输出分开,以帮助您在测试中将自己与这些问题区分开来.

一种方法是使用映射函数,它将采用列表和转换函数并对列表中的每个项执行函数,然后返回转换后的列表.

通常,在创建表时,我最终会在创建行时使用两个for循环.

  1. 迭代所有行.
  2. 而在(1)中迭代行中的项目.

单元测试非常难看,但是使用闭包你可以创建函数生成器,实现起来真的很容易[实际上有一点点说法].


Nul*_*ion 3

您可以使用 PHPUnit。它有输出测试。

http://www.phpunit.de/manual/3.0/en/testcase-extensions.html

  • 请注意,上面的 URL 指向旧版本的 PHP Unit。截至 2013 年 11 月,PHPUnit 的版本已更改为 3.8,其中不再存在此输出测试。 (2认同)