문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
java:spock [2020/06/26 15:20] kwon37xi [Spock 1.3 & groovy 2.5 문제점] |
java:spock [2020/08/27 13:35] (현재) kwon37xi [Mock Argument Capture] |
||
|---|---|---|---|
| 줄 45: | 줄 45: | ||
| ===== Mock Argument Capture ===== | ===== Mock Argument Capture ===== | ||
| - | [[http:// | ||
| - | |||
| <code groovy> | <code groovy> | ||
| - | SaveCommentEvent capturedEvent | + | // Argument capture |
| - | + | def extern = null | |
| - | given: | + | |
| - | ... | + | 1 * mock.foo( { extern |
| - | + | 1 * mock.foo( { it.size() > 0 }) >> { extern | |
| - | when: | + | |
| - | | + | |
| - | + | ||
| - | then: | + | |
| - | 1 * eventBus.fireEvent({capturedEvent | + | |
| - | + | ||
| - | capturedEvent instanceof SaveModelEvent | + | |
| - | capturedEvent.newModel == newModel | + | |
| - | capturedEvent.oldModel | + | |
| </ | </ | ||
| - | * void 메도드의 경우 아래 참조. | + | * void 메소드의 경우 아래 참조. |
| ===== void method Mock - 인자 값 조정 혹은 throw exception ===== | ===== void method Mock - 인자 값 조정 혹은 throw exception ===== | ||
| 줄 98: | 줄 87: | ||
| ===== 기타 Mock ===== | ===== 기타 Mock ===== | ||
| <code groovy> | <code groovy> | ||
| - | 0 * _ | + | 0 * _ |
| </ | </ | ||
| 줄 119: | 줄 108: | ||
| </ | </ | ||
| - | ===== Spock 1.3 & groovy 2.5 문제점 ===== | + | ===== Spock 1.3 & groovy 2.5 문제/변경점 ===== |
| + | * [[http:// | ||
| + | |||
| + | ==== where 의 변수명이 서로 다른 메소드에 동일하게 존재하는데 타입이 다를경우 ==== | ||
| * groovy 2.4 로는 발생하지 않지만 2.5로 가면 '' | * groovy 2.4 로는 발생하지 않지만 2.5로 가면 '' | ||
| - | * '' | + | * '' |
| - | * spock 1.3 에서 Argument capture 방식 변경됨. [[https:// | + | |
| - | * [[http:// | + | |
| + | ==== Argument 의 각 줄을 assert 하게 변경되면서 capture 방식도 바뀜 ==== | ||
| + | * 1.2 에서는 Argument 의 Closure 블록에서 조건을 체크하려면 전체를 하나의 true/false 를 반환하게 만들어야 했다. | ||
| + | * 1.3 부터는 각 줄에 대해 '' | ||
| + | |||
| + | <code groovy> | ||
| + | // 1.2 방식 | ||
| + | 1 * mock.foo({ it.size() > 1 && | ||
| + | |||
| + | // 1.3 - 한줄 한줄의 boolean 반환 결과를 자동 체크함. | ||
| + | 1 * mock.foo({ | ||
| + | it.size() > 1 | ||
| + | it[0].length == 2 }) | ||
| + | </ | ||
| + | |||
| + | * 그러나 그로인해서 | ||
| + | |||
| + | <code groovy> | ||
| + | // Argument capture | ||
| + | def extern = null | ||
| + | |||
| + | 1 * mock.foo( { extern = it; it.size() > 0 }) // 1.2 방식 | ||
| + | 1 * mock.foo( { it.size() > 0 }) >> { extern = it[0] } // 1.3 방식 | ||
| + | </ | ||
| ===== 참조 ===== | ===== 참조 ===== | ||