【第6回・最終回】DrupalカスタムモジュールのPHPUnitテストについて

  •  
 
MAXIMUM に投稿

タグ

1. 目的

前回では、.installファイルを使用してテーブルを作成する方法について確認しました。

今回は最終回として、カスタムモジュールの処理をPHPUnitテストというもので試験してみます。

2. PHPUnitテストの利点

PHPUnitテストを使えば、単体試験をソースコード化することで自動化および再試験の簡略化が出来ます。

Drupalだと固有のUnitTestCaseを継承してテストクラスを作成できます。

final class Issue5MailTest extends UnitTestCase {

今回は、イベントの出欠回答時に通知送信するメールを例にします。

3. メール内容を確認する

下記はメールの件名や本文が想定通りかを確認していくソース例です。

$this->assertSame(
  '【イベント通知】出欠回答がありました',
  $message['subject']
);

$this->assertContains('■ 出欠: 参加', $message['body']);

assertSame()はメッセージ値が同じかを確認していて、assertContains()は指定した回答内容が含まれているかを確認しています。

4. モックを使用する

実際にメールを送信せずにテストするため、モックを使用しています。

$mail_manager = $this->createMock(MailManagerInterface::class);

$mail_manager->expects($this->once())
  ->method('mail');

これで、mail()が呼び出されることを確認できます。

5. PHPUnitテストを実行する

Macターミナルかつddev環境を前提に実行します。

ddev exec "cd web && ../vendor/bin/phpunit -c core modules/custom/event_manager/tests/src/Unit"

実行結果は下記になります。

...  3 / 3 (100%)

OK (3 tests, 23 assertions)

3件成功です。

6. 感想

場合によりますが、手作業で試験を回さなくて良いのは便利でした。

次のステップとしてCI/CDパイプラインへの組み込みを検討しても良いかもと思いました。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。