单元测试php中的单例模式方法__clone()

时间:2011-03-02 04:17:12

标签: php unit-testing design-patterns singleton phpunit

我目前正在对我制作的自定义类进行单元测试,该类基于singleton设计模式。根据代码覆盖率报告,我有95.45%的覆盖率。我正在使用PHPUnit进行单元测试,我已经通过了this article  塞巴斯蒂安·贝格曼(Sebastian Bergmann)。

我唯一的问题是通过魔术方法__clone()测试类克隆。我已将该方法设置为私有以避免实例化

private final function __clone()
{}

编写测试以确保单例不是“可克隆”的最佳方法是什么。 (最终可以使用相同的测试来测试__constructor()

不是真的一个问题,但它只是我还是测试在一个Windows框上运行速度比一个* nix框慢得多?

2 个答案:

答案 0 :(得分:3)

请记住,代码覆盖率不是衡量程序正确程度的标准,100%覆盖率也不意味着您执行了每个代码路径。例如,三元运算符

a ? b : c

和复合布尔表达式

if (a < 1 || b > 6)

被计为单个语句,即使您可能由于短路而只执行其中的一部分。另外,省略单个语句ifwhile等块的大括号将整个事件转换为单个语句。

以下内容将在代码覆盖率报告中显示为单个语句,因此您无法判断是否已执行这两种情况(truefalse)。

if (...)
    foo();

我觉得

private final function __clone() { }

太简单而不能失败。测试该方法抛出异常(使用不少于客户端不会做的反射)测试PHP解释器 - 超出了我的书范围。

[为了记录,我在获得100%的代码覆盖率方面也得到了一点OC,但是记住上述事实有助于缓解它,因此我可以继续编写更好的代码。]

答案 1 :(得分:1)

调用clone或constructor并检查是否抛出了异常。