Laravel6.x constructorでDI指定があるビジネスロジックのテストを書く際、
setUp
メソッドの引数でDIを書くことができないので、ややつまりました。
テストしたいビジネスロジック
<?php
class Business
{
private $hogeClass;
// コンストラクタ
public function __constructor(Hoge $hoge)
{
$this->hogeClass = $hoge;
}
// なんかhogeを使うメソッド
public function foo()
{
$this->hogeClass->get();
}
}
テスト
app(クラス名::class)
を使います。
@mpywさんに教えていただきました!
$this->app->make(クラス名::class)
を使います。
class BusinessTest extends TestCase
{
private $hogeClass;
/**
* テスト前に毎回実行される
*
* @return void
* @throws IlluminateContractsContainerBindingResolutionException
*/
public function setUp(): void
{
parent::setUp();
// サービスクラスのインスタンス化
$this->hogeClass= $this->app->make(Hoge::class); // ←これ!!!!!!!!!!
}
// なんかhogeを使うメソッドのテスト
public function testFoo()
{
$this->hogeClass->get();
}
}
参考
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。