使用PHPUnit测试静态类

时间:2009-11-16 14:49:25

标签: php class static phpunit

我有一套我正在尝试测试的课程。 A类依赖于Class X. Class X包含随机构和数据库做事的函数。我已经创建了一个类X的模拟版本,它可以完全返回我想要的版本,以便测试没有依赖项的A类。

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

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

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

先谢谢你的帮助,

麦克

2 个答案:

答案 0 :(得分:1)

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

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

如果您真的需要静态,这将允许您在运行时更改类依赖项。另一种方法是不使用静态类并使用类似于symfony组件中的dependancy injection container。注射容器也可以根据需要注射粪便。

答案 1 :(得分:0)

  
    

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

  

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

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