Laravel为包含依赖项的服务方法编写了UnitTest



不知道如何为特定的服务方法编写单元测试,该方法内部有一些依赖项。这是我想要测试的一个简化的类和方法。

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
通过这种方式,当您进行测试时,您将能够通过";假冒工厂;返回模拟对象

相关内容

  • 没有找到相关文章

最新更新