如何在Phpunit中测试此代码

时间:2014-03-15 10:36:33

标签: php phpunit

我是测试的初学者。 有一个应用程序。使用singelton(返回应用程序的方法A :: getMainApp())。 在测试类中有一个方法:

protected function endApp ()
{
    $ logger = new MainLogger ();
    $ logger-> log ();

    $ this-> response-> send ();
    exit ( 0);
}

此方法使用两个类(MainLogger,ResponseManager($ this-> response)),而这些类甚至可以使用其他类。

在这个测试中,我不需要"来模拟和创建"所有必需的课程? 我基本上需要测试所谓的log (), response-> send () and exit ( 0)它们的结果我会检查每个类别单独测试时以及当我在"上测试应用程序时浏览器级别"正确?

如何验证该方法是否按正确顺序引入了所需的功能? 我明白我不能使用模拟对象,因为我使用singelton?

THX。

1 个答案:

答案 0 :(得分:1)

您的问题是,您的班级与MainLoggerResponseManager紧密相关,您无法模仿它们,因此您无法单独测试您的方法。需要进行一些重新分解。

我不知道你的类是如何编写的,但你需要注入这样的依赖关系以使其可测试。将它们传递给构造函数是一种方法。这样你就可以传入一个模拟对象来进行测试。

或者,您可以将依赖项传递给需要它们的方法,例如: -

protected function endApp(MailLogger $logger)
{
    $ logger->log();

    $ this->response->send();
    exit(0);
}

旁注;我不确定你想exit()在这里完全停止你的脚本,return我觉得更合适。