不知道如何为特定的服务方法编写单元测试,该方法内部有一些依赖项。这是我想要测试的一个简化的类和方法。
class SimpleService
{
protected $someAuthService;
public function __construct(SomeAuthService $someAuthService) {
$this->someAuthService = $someAuthService;
}
public function getDemoData()
{
$demoDataDTO = new DataDTO($this->someAuthService->login($email));
return [
'someKey1' => $demoDataDTO->getSomeKey1(),
'someKey2' => $demoDataDTO->getSomeKey2(),
];
}
}
我想测试getDemoData方法,所以我写了测试类:
class SimpleServiceTest extends TestCase
{
public function testGetDemoData()
{
// and at this point I'm not sure what to do next.
// let's say I want to test if this method returns expected array
}
}
在我看来,最简单的方法是使用一种方法来获得您需要的对象:
public function getDemoData()
{
$demoDataDTO = $this->getDataDao();
return [
'someKey1' => $demoDataDTO->getSomeKey1(),
'someKey2' => $demoDataDTO->getSomeKey2(),
];
}
public function getDataDao(){
return new DataDTO($this->someAuthService->login($email));
}
然后在你的测试中,你可以模拟这个方法,这样它就会返回一个你为测试编造的假DataDTO
,
否则,您应该将服务与创建DataDTO
的责任分开,因此您应该创建一个DataDTOFactory
,将该工厂传递给服务的构造函数,并使用它来构建DataDTO
通过这种方式,当您进行测试时,您将能够通过";假冒工厂;返回模拟对象