Spockの書き方を毎回調べるのめんどくさかったのでまとめる
とりあえず、殴り書きのようにメモっておきます
レベル低くてすまん・・・
ブロックの説明
ブロック | 説明 | 例 |
---|---|---|
setup | 前処理 | |
when | thenとセットで使用:テストしたいことを書く | |
then | whenとセットで使用:テスト結果の比較を書く | |
expected | 実行とチェックを1つにまとめて書く | |
cleanup | 後処理 | |
where | パラメータを渡して結果をチェックする |
プライベートメソッドのテスト
なんだかんだリフレクションを使う
setup:
Method method = testService.class.getDeclaredMethod("getTestMethod",
hiki1.class, hiki2.class, hiki3.class)
method.setAccessible(true)
when:
def ls = (List<testDto>) method.invoke(testService, hiki1, hiki2, hiki3)
モックの書き方
serviceにDIされているtestServiceのメソッドをモック化する
def testService = Mock(TestService)
testService.getMethodMock(_, _) >> retObj
service.testService = testService
引数は _ で何かの値を示す。
基本的には引数3つなら (_, _, _)で良いのかなと
ここで、値を決めて書くとパラメータごとの振る舞いが設定できる
(1, _) と記述すれば、第一引数に1が渡ってきた場合の振る舞いを指定できる。
元の実装が動く状態で、一部モック化する
def testService = Spy(TestService)
testService.getMethodMock(_, _) >> retObj
service.testService = testService
Spyを使用すると、TestService自体メソッドは動作する
指定したメソッドは、モック化して値を返す
where句の書き方
where:
isStatus | cmd || expect
true | INSERT || true
true | DELETE || false
false | _ || false
パラメータを設定済みでNewする
def m = new TestObj(p1: "p1", p2: "p2")
こうすると、NewしたオブジェクトTestObjのp1,p2に値がセットされる
_