タイトルはほとんどそれをすべて言います。従来のJUnitテストをセットアップして、コントローラーの依存関係をモックし、アクションに対してテストを実行したいと思います。
私はこのように私の目標を達成できることがわかりました:
public class AccountsControllerTest {
private controllers.Accounts accountsController;
@Test
public void test() {
running(fakeApplication(), new Runnable() {
public void run() {
accountsController = new controllers.Accounts();
accountsController.setAccountsWorkflow(mock(workflow.Accounts.class));
}
});
}
}
ここでの明らかな問題は、テスト対象のクラスをインスタンス化し、メソッドでそれを行う必要があるときに、テストメソッド自体からモック依存関係を注入していることsetup()
です。従来の方法でコントローラーをテストする場合、このsetup()
方法は役に立たないようです。
もちろん、Playが推奨する方法でコントローラーをテストできますが、アプリケーションは外部のSOAP Webサービスに依存しているため、サーバーがダウンしているときにコードが機能していることを示す単体テストが必要です。
では、モックを使用してPlayコントローラーの単体テストを行いながらsetup()
、teardown()
メソッドを利用するための最良の方法は何でしょうか。
編集
ここではある程度の知識があることを前提としているので、知らない人のために、単体テストでのコントローラーのインスタンス化はrunning()
関数またはPlayでラップする必要があります。アプリケーションが開始されていないことを示すランタイム例外をスローします。