我对测试很陌生,我想了解在现实世界中如何实现测试。例如,有这个代码实现了一个内部框架,并采用方法链接。乍一看,我认为嘲笑是最好的方式,但大多数例子都是这样的:
public function someFunction(A $a)
{
return $a*b;
}
然而,我正在测试的代码是这样的:
public function deleteUser($user_id) {
$user_id= (int)$user_id;
$flag = Framework::getInstance()->request->get('delete') || false;
if(!$this->exists($user_id)) {
throw new UserException(UserException::NOT_EXIST);
}
return $this->delete(array('id' => $user_id));
}
你会如何测试?我看过了 [1]:在PHPUnit中测试具有依赖关系的对象
Testing objects with dependencies in PHPUnit
但它修改实际代码不是一种选择。
答案 0 :(得分:3)
简短回答:您无法对该代码进行单元测试。由于静态方法调用,代码太过耦合到Framework类,因此您无法单独测试 deleteUser()方法。 This article关于测试使用Singletons的代码很好地描述了这种情况。
答案很长,您无法对该代码进行单元测试,但您仍然可以创建有用的测试,例如集成测试或功能测试。您可以使用this question作为参考,但基本上,在集成测试中,您可以同时测试代码的多个部分。 在这种测试中,您可以测试此方法的预期行为,即用户被删除,而不必担心您的类的依赖性。你想测试两个类(测试类和Framework类)一起工作,所以你不需要模拟任何东西。
话虽如此,为什么你不能只改变代码?我强烈建议将依赖项注入代码(如第一篇文章中所述),而不是使用单例。