我目前正在对我制作的自定义类进行单元测试,该类基于singleton
设计模式。根据代码覆盖率报告,我有95.45%的覆盖率。我正在使用PHPUnit
进行单元测试,我已经通过了this article
塞巴斯蒂安·贝格曼(Sebastian Bergmann)。
我唯一的问题是通过魔术方法__clone()
测试类克隆。我已将该方法设置为私有以避免实例化
private final function __clone()
{}
编写测试以确保单例不是“可克隆”的最佳方法是什么。 (最终可以使用相同的测试来测试__constructor()
)
不是真的一个问题,但它只是我还是测试在一个Windows框上运行速度比一个* nix框慢得多?
答案 0 :(得分:3)
请记住,代码覆盖率不是衡量程序正确程度的标准,100%覆盖率也不意味着您执行了每个代码路径。例如,三元运算符
a ? b : c
和复合布尔表达式
if (a < 1 || b > 6)
被计为单个语句,即使您可能由于短路而只执行其中的一部分。另外,省略单个语句if
,while
等块的大括号将整个事件转换为单个语句。
以下内容将在代码覆盖率报告中显示为单个语句,因此您无法判断是否已执行这两种情况(true
和false
)。
if (...)
foo();
我觉得
private final function __clone() { }
太简单而不能失败。测试该方法抛出异常(使用不少于客户端不会做的反射)测试PHP解释器 - 超出了我的书范围。
[为了记录,我在获得100%的代码覆盖率方面也得到了一点OC,但是记住上述事实有助于缓解它,因此我可以继续编写更好的代码。]
答案 1 :(得分:1)
调用clone或constructor并检查是否抛出了异常。