1

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

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

var_dump对对象执行 a会导致class Foo_Bar_Baz#27115(0) { }它似乎是在创建模拟实例。

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

4

1 回答 1

0

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

我怀疑大小写的变化会因为自动加载机制而导致行为发生变化;PHP 只会自动加载 Foo_Bar_Baz.php 和 Foo_BAR_Baz.php 之一。

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

于 2013-05-21T22:50:46.940 回答