이미 만들어져있는 기능 구현부의 검증이 필요했다
배포자동화를 하면서 test case를 만들어
내 프로젝트의 신뢰성을 더할 필요가 있었다
기존에
데이터베이스의 컬럼명을 변경하면서 웹서버의 변수명을 수정하거나
조금씩변화가 있을때마다 기능 하나하나를 직접 확인했다
종이에 체크리스트를 작성해 하나하나 확인후 체크했는대
이 작업을 테스트코드로 구현 하기로 했다
spring Boot에는 junit 테스트 프레임워크가 포함되어 있다
Test 어노테이션으로 바로 테스트코드를 작성할수있다
기능 구현부의 메서드에서 테스트코드를 생성하는 자동완성을 가지고 있어서 사용했다
테스트메서드의 경우 기능메서드의뒤에Test를 추가하는것이 규칙인것 같다

이 코드를 실행시키면 컨트롤러에서 user객체를 join()메서드에 보내는것
user객체를 join()메서드로 넘긴다

join()메서드는 받은user정보를 바인딩하여 쿼리를 만들고
MySQL 해싱(sha256) 함수 로 해시값을 데이터베이스에 저장 하게 된다
그후 then 부분의 select로 같은 객체를 다시 조회 하면서 join() 이 정상적으로 동작했는지 검증하는 방식이다
테스트코드는 테스트할 기능을 실행후 결과를 확인하면서 검증하는것이다
하지만 문제는 기능이 실제로 실행 되면
실제 서비스에 영향을 준다..

데이터베이스의 lfg_user테이블이다
테스트했던 기록이 전부 남아있기때문에
데이터베이스를 확인하면 언제 어떤기능을 추가 했는지 파악할수 있다
이제 배포자동화를 할때 모든 기능을 한번씩구현하면서
데이터베이스의 실서비스데이터보다 테스트기록으로 남은 데이터가 많아지게 될것이다
이전의 테스트데이터는 지우지않더라도
앞으로의 테스트흔적을 남기지 않기 위해
인메모리 데이터베이스 H2를 사용했다
https://pushvalue.tistory.com/63
test case를 위한 test DB
테스트 케이스를 만들고 있다 테스트 하나를 실행하면 그 흔적이 서비스중인 테이터베이스에 그대로 남는다 언제 어떤구현부를 테스트 했는지 알수도 있겠지만 서비스와 목적이 맞지않는 데이
pushvalue.tistory.com
H2데이터 베이스는 Mysql에서 지원하는 sha256()이나 sysdate() 같은 함수를
지원하지않기때문에
커스텀 함수로 직접 구현해야 한다

테스트코드나 커스텀 함수가 같이 빌드 되지않도록
test디랙토리 하위에 포함시켰다

해싱함수를 직접 구현 할수없어 MySQL함수를 그대로 카피했다
커스텀 함수명을 MySQL함수와 동일하게 정하면
하나의 쿼리로 구현부와 테스트코드 둘다 실행 할수 있다
MySQL의 해싱함수는
sha("비밀번호",256) 이기 때문에
커스텀 함수에 필요 없는 파라미터를 받아 구조를 통일 시켜주었다
실서비스중인 데이터베이스와 같은 구조,
실서비스중인 데이터베이스에서 지원하는 함수 구현,
하나의 테스트가 끝날때 데이터 정리,
해당 문제를 고려해서 test용DB H2DB를 사용,
테스트코드를 실제 서비스중인 데이터베이스와 분리 하여
테스트코드를 만들수 있었다
'걸어서 개발 속으로' 카테고리의 다른 글
| ChatGPT가 코드리뷰를 할수 있을까? (0) | 2023.06.01 |
|---|---|
| 내장DB 커스텀 함수 (0) | 2023.05.31 |
| test case를 위한 test DB (0) | 2023.05.19 |
| 내 서비스에 로그 적용 (1) | 2023.05.06 |
| 로그 남기기 (0) | 2023.05.03 |
댓글