質問: mock(Hoge.class) when(hoge.getXXX).thenReturn("hogehoge"); }).execute({ result(test.target()); }).evaluate(r -> { assertEquals(r, "expected"); }); } ``` よろしくお願いします。
回答: xUnit Test Patternsで言う、"Four Phase Test"を強制&明示できるテスティングフレームワークを探している、ということですね。Javaそのものではありませんが、Groovyで記述するSpockというテスティングフレームワークででは、まさにそのような記述が可能になっています。 SpockではテストコードをGroovyで記述しますが、テスト対象のプロダクトコードはJavaで記述されていても問題ありません。 たとえば、質問にあるような疑似テストコードをSpock風に書くと以下のようになります。 ``` void "test of hoge"() { given: // 関連するクラスのスタブやモックの作成コードのテスト準備コード Hoge hoge = Mock(Hoge) hoge.getXXX() >> "hogehoge" test.hoge = hoge when: // テスト実行のコード def result = test.target() then: // assertionのコード result == "expected" } ``` Spockでは、 * ラベルによるFour Phase Testに従った記法 * Power Assertによるverifyの簡素化&NG時の詳細表示 * 強力なParamterized Testサポート * 標準でモック&スタブをサポート * Javaと親和性の高いGroovyによる柔軟な記述 などの特徴があります。 詳しい情報は、下記のURLからどうぞ。 * *