조합문제는 경우의 수와 그 크기를 보고서 풀이의 방향을 정해야한다.
(재귀로 할거면 재귀의 깊이를 생각해봐서 메서드 호출 스택의 깊이를 벗어나지않는지 확인은 필수)
debug할 때
api관련된 부분 끄는 법
Preferences - Debug - Step Filtering - Use Step Filters 클릭
스프링에서 테스트를 할 때, 하나의 테스트 함수에서 다른 함수를 호출해서 데이터를 추가하면, 그 부분은 반영이 되지않은 상태로 다른 테스트가 진행되는 문제를 만났다.
이 부분을 잘 몰라서 다른 기능들을 수정해보다가 도무지 원인을 알 수 없어서 하나의 메서드 안에서 모든 테스트를 수행해봤더니 제대로 작동을 했다.
가장 크게 간과했던 부분은 예상외로 근본적인 문제였다.
Test의 순서는 독립적으로 진행된다
test 순서를 의존적으로 진행하면 안된다.
테스트를 할 때 다음의 어노테이션들을 이용하면 각각 독립적인 흐름을 가지는 코드를 작성할 수 있다.
@AfterEach를 사용해 하나의 테스트 끝날 때마다 저장소나 공용 데이터를 정리해줘야한다.
@BeforeEach를 사용한다면 각각의 테스트에 공통적인 파라미터 및 설정을 적용할 수 있다.
이런 조건들을 피하기위해서 다음을 잘 생각하면서 테스트 코드를 작성해야겠다.
@SpringBootTest
스프링 컨테이너와 테스트를 함께 실행 한줄로 가능
@Transactional
데이터베이스에 commit 하기 전에는 반영이 안되는데, 이 어노테이션이 달려있으면, 테스트 시작 전에 트랜잭션을 시작하고 끝난 후에 롤백해서 디비에 테스트 데이터가 남지않아서 다른 테스트에 영향을 주지않게된다. 지운다는 것보다는 반영을 안하는 것이다.
@Commit
데이터베이스에 commit함
단위테스트를 잘 만들어서 테스트 해보는 것이 더 중요하다. 작은 버그 하나가 큰 피해를 줄 수 있기 때문에 테스트 코드를 잘 짜는 것이 중요하다.
테스트를 꼼꼼하게 작성하고 테스트케이스를 잘 만들어야한다.
테스트 코드를 작성할 때는 given - when - then으로 잘라서 생각한다면 정확하고 좋은 단위테스트를 만들 수 있다고 하니 이렇게 만드는 연습을 해봐야겠다.