본문 바로가기
Back-End (web)

Spock 테스트 정리

by 햄과함께 2019. 5. 23.
320x100

Spock으로 테스트코드를 짜보자
(Spock)[http://kwonnam.pe.kr/wiki/java/spock]

spock test 예시

when - then

@SpringBootTest
class apiServiceSpecTest extends Specification {

    @Autowired
    ApiService apiService

    int productNo = 100
    int size = 100

    def "getProductNames 테스트"() {
        when:
        List<String> result = apiService.getProductNames(productNo, size)

        then:
        result[0] == "name1"
    }
}

expect

expect = when + then

def "getProductNames 테스트"() {
    expect:
    List<String> result = apiService.getProductNames(productNo, size)
    result[0] == name

    where:
    productNo    | size || name
    100         | 100  || "name1"
    200         | 200  || "name2"
}

where

특정 변수(TC)에 값을 대입해서 해당 테스트코드를 독립적으로 기동한다.
TC 한 줄 당 테스트 한 번

where:
var1  | var2   || result
"변수1" | "변수2" || "결과

입출력 구분을 위해 || 구분자를 사용한다고 한다.

참고
Mocking 테스트
Data Driven Test

expect 변수가 너무 긴 경우

problem
TC 변수가 너무 많거나 하나의 변수가 너무 긴 경우 가로로 너무 많이 나열된다. -> 보기 불편
ex) TC 변수 개수가 100개이거나 하나의 변수가 너무 긴 경우

where:
var1  | var2  | var3  | var4 | var5 | var6 | var7  | var8 | ....

Solve

// 2차 배열로 TC 반환.
def getTestData() {
    [
      ["var1", "var2", "var3", "var4", "var5", 
        "var6",  "var7",  "var8"],
      ["var1", "var2", "var3", "var4", "var5", 
        "var6",  "var7",  "var8"]
    ]
  }

  // mock Test
  def serviceTest() {

    where:
    [var1, var2, var3, var4, var5, var6, var7, var8] << getTestData() // 2차 배열 TC 변수에 주입.
  }

where 조건 1개 일 때

where:
a | _
1 | _
7 | _
0 | _

_ 사용.

참고로 _는 grrovy에서 와일드카드로 사용된다고 한다.

참고 : http://spockframework.org/spock/docs/1.0/data_driven_testing.html

webClient Test

Flux : https://docs.spring.io/spring/docs/current/spring-framework-reference/pdf/testing-webtestclient.pdf

320x100

댓글