티스토리 뷰

mock 테스트 코드를 작성 중에 method호출 시 passed parameter인 local variable에 대한 로직 처리 후 결과 값을 알고 싶었다. method에서 return 되는 값에 대한 테스트는 간단했지만 method에서 return 되는 값에는 포함되지 않는 'local variable'이어서 어떻게 확인할지 고민하던 중 찾은 방법을 기록하려고 한다!

 

 

 

 

코드 예시

 

여기 테스트하려는 method의 예시가 있다. search는 method의 parameter로 전달이 되고, if절의 로직에 따라 값이 바뀐다. return값은 mapper로 DB에서 가져온 데이터 list가 되고 search는 따로 return 되지 않는다.

 

테스트할 method

@Override
public List<vo> getList(String search) {
       if (search.equals("")) {
           //....search관련 변경 로직
       }
       return mapper.selectBySearch(search);
}

 

 

여기서 내부 로직을 통해 변경되는 search의 값을 알고 싶다면? Captor라는 걸 이용해서 해결할 수 있다.

 

1. 먼저, 테스트 코드를 작성하는 클래스에 아래와 같이 선언해준다.

 

Test code 클래스

@Captor
ArgumentCaptor<String> captor;

 

 

2. 선언한 captor를 이용하여 local variable인 search의 값을 테스트한다.

 

Test code

@DisplayName("목록 조회")
@Test
public void test_getList_emptySearch(){
    service.getList("");

    verify(mapper).selectBySearch(captor.capture()); //전달되는 search값을 찍고
    String retSearch = captor.getValue(); //search값을 가져와서

    assertEquals("기대값",retSearch); //기대값과 맞는지 확인!
}

 

 

마지막으로 사실 테스트 코드도 깔끔하게 만들 수 있는 코드를 짜는 게 물론 중요하지만, 편리한 테스트 코드를 위해 기존 코드를 바꿀 수는 없고,, 사실 회사에서는 내가 짠 코드가 아닐 수도 있다.. 더 좋은 방법들은 계속 찾아봐야겠다!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함