PHPUnit模拟对象替换真实类

时间:2013-05-02 20:45:46

标签: phpunit zend-test

我的测试套件中有几个测试在Zend_Test中运行

一个测试通过PHPUnit的MockBuilder创建一个Foo_Bar_Baz的模拟作为该类的依赖。现在在Foo_BAR_baz的测试中(案例的变化是有目的的,并且由于自动加载是必要的),我没有得到类,而是模拟的一个实例,这显然不起作用。

在对象上执行var_dump会导致class Foo_Bar_Baz#27115(0) { },因此它似乎正在创建模拟的实例。

修复模拟中的情况可以使事情按预期工作。我以前从未在模拟对象中看到过这种行为。由于某种原因,模拟的类被加载到PHP中,以便当下一个测试尝试实例化真实对象时,它将实例化mock。为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

PHP中的类名不区分大小写,但* nix服务器上的文件名是。

我怀疑由于自动加载机制,案例的变化导致行为发生变化; PHP只会自动加载Foo_Bar_Baz.php和Foo_BAR_Baz.php中的一个。

在您的情况下,如果您已经定义了一个类Foo_BAR_Baz(作为模拟),那么PHP将对Foo_Bar_Baz使用相同的定义,从而忽略您的真实类定义。