我是测试的初学者。 有一个应用程序。使用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。
答案 0 :(得分:1)
您的问题是,您的班级与MainLogger
和ResponseManager
紧密相关,您无法模仿它们,因此您无法单独测试您的方法。需要进行一些重新分解。
我不知道你的类是如何编写的,但你需要注入这样的依赖关系以使其可测试。将它们传递给构造函数是一种方法。这样你就可以传入一个模拟对象来进行测试。
或者,您可以将依赖项传递给需要它们的方法,例如: -
protected function endApp(MailLogger $logger)
{
$ logger->log();
$ this->response->send();
exit(0);
}
旁注;我不确定你想exit()
在这里完全停止你的脚本,return
我觉得更合适。