1

我有一组我正在尝试测试的课程。A 类依赖于 X 类。X 类包含执行随机操作和数据库操作的函数。我已经创建了 Class X 的模拟版本,它准确地返回我想要的,以便在没有依赖关系的情况下测试 Class A。

所以,我的问题是,我现在如何测试 X 类,因为我已经包含了具有相同名称和文件名的模拟版本。我收到“无法重新声明 X 类”错误。

我认为我不能使用存根,因为无法将存根对象传递给我的测试类。被测类(A 类)将请求一个静态类的实例(ClassA::getInstance();)。

这是否与测试套件或测试用例有关,因为我无法取消包含包含 X 类模拟版本的文件。

在此先感谢您的帮助,

麦克风

4

2 回答 2

1

您不能在 PHP 中取消包含文件/类,因此这些类要么需要使用不同的名称,要么您需要命名它们。至于使用存根类,您可以使用两种方法。使用包含依赖项的实例/类变量,这样您就可以将它们换掉。像

self::$_classes['classA']::methodCall();
$this->_classes['classA']::methodCall();

如果您确实需要静态,这将允许您在运行时更改类依赖项。另一种方法是不使用静态类并使用依赖注入容器,就像在 symfony 组件中找到的那样。注入容器也可以让您根据需要注入模拟。

于 2009-11-16T15:04:44.937 回答
0

没有办法将存根对象传递给我的测试类。

这意味着您的 A 类强烈引用 X 类?我个人建议将您的 Class X 模型重命名为真实模型(例如X_MockUp)将其放入测试文件夹层次结构中,然后将其传递给您要测试的 Class A。目前可能无法实现,但随后更改您的架构!它将更加灵活和可测试友好

您会收到此错误,因为您在两个文件中具有相同的类名,您必须区分它们。

于 2009-11-16T15:01:16.860 回答