3

我对测试有点陌生,我想了解如何在现实世界场景中实施测试。例如,有这段代码实现了一个内部框架,并使用了方法链。乍一看,我认为 mocking 是最好的方法,但大多数例子都是这样的:

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([
        'id' => $user_id
    ]);
}

你将如何测试它?

我已经查看了“在 PHPUnit 中测试具有依赖关系的对象”,但修改实际代码不是一种选择。

4

1 回答 1

3

简短的回答:您不能对该代码进行单元测试。由于静态方法调用,代码与Framework类过于耦合,无法单独测试deleteUser()方法。这篇关于测试使用单例的代码的文章很好地描述了这种情况。

长答案是您无法对该代码进行单元测试,但您仍然可以创建有用的测试,例如集成测试或功能测试。您可以将此问题用作参考,但基本上,在集成测试中,您可以同时测试代码的多个部分。在这种测试中,您可以测试此方法的预期行为,即删除用户,而不必担心您的类的依赖关系。你想测试两个类(被测类和框架类)一起工作,所以你不需要模拟任何东西。

说了这么多,为什么不改代码呢?我强烈建议将依赖项注入您的代码(如第一篇文章中所述)而不是使用单例。

于 2013-03-21T18:42:58.797 回答