私のサービスのPHPUnitテストを書こうとしています。
私のテストは次のようになります。
class CustomServiceTest extends UnitTestCase {
public function testDefaultBehavior() {
$service = new CustomService(\Drupal::service('custom_utils.some_resolver'), \Drupal::configFactory());
$service->execute();
}
}
ただし、次の例外が発生します。
Drupal\Core\DependencyInjection\ContainerNotInitializedException:
\Drupal::$container is not initialized yet. \Drupal::setContainer() must be called with a real container.
何が悪いのですか?
テストで使用するサービスをモックして、値が返されるようにする必要があります。次のようにして行うことができます。
public function testDefaultBehavior() {
$some_resolver = $this->getMockBuilder('Drupal\namespace\for\custom_utils\someresolver')
->disableOriginalConstructor()
->getMock();
$config_factory = $this->getMockBuilder('Drupal\Core\Config\ConfigFactory')
->disableOriginalConstructor()
->getMock();
$service = new CustomService($some_resolver, $config_factory);
}
Drupal\namespace\for\custom_utils\someresolver
の代わりに、実際のインターフェース(またはインターフェースがない場合はクラス)を使用する必要があることに注意してください。
モックしたサービスから値を返すように期待を設定する必要があります。あなたはそれについてもっと読むことができます:
https://www.drupal.org/docs/8/phpunit/understanding-phpunit-expectations