我有一套我正在尝试测试的课程。 A类依赖于Class X. Class X包含随机构和数据库做事的函数。我已经创建了一个类X的模拟版本,它可以完全返回我想要的版本,以便测试没有依赖项的A类。
所以,我的问题是,我现在如何测试X类,因为我已经包含了具有相同名称和文件名的模拟版本。我得到了“无法重新声明X类”的错误。
我认为我不能使用存根,因为没有办法将存根对象传递给我的测试类。被测试的类(A类)将要求一个静态类的实例(ClassA :: getInstance();)。
这是否与测试套件或测试用例有关,因为我无法取消包含类X的模拟版本的文件。
先谢谢你的帮助,
麦克
答案 0 :(得分:1)
您不能在PHP中取消包含文件/类,因此这些类要么使用不同的名称,要么需要命名它们。至于使用存根类,可以使用两种方法。使用包含依赖项的实例/类变量,以便可以将它们交换出来。喜欢
self::$_classes['classA']::methodCall();
$this->_classes['classA']::methodCall();
如果您真的需要静态,这将允许您在运行时更改类依赖项。另一种方法是不使用静态类并使用类似于symfony组件中的dependancy injection container。注射容器也可以根据需要注射粪便。
答案 1 :(得分:0)
没有办法将存根对象传递给我测试的类。
这意味着你的A类强烈引用了X类?就个人而言,我建议将您的Class X模型重命名为真实的模型(例如X_MockUp
)将其放入测试文件夹层次结构中,然后将其传递给您要测试的A类。目前可能不可能,但随后改变你的架构!它将更灵活,可测试友好。
您会收到此错误,因为您必须在两个文件中使用相同的类名来强制区分它们。