BackEnd(Java)/테스트(5)
-
JUnit5 Parameterized Tests 2022.07.09
-
AssertJ을 사용해보자!
AssertJ는 표준 JDK를 준수하고 테스트 코드 가독성을 향상하며 TDD를 더 쉽게 할 수 있도록 제공하는 테스트 프레임워크입니다. AssertJ 프레임워크를 사용하기 위해서는 build.gradle 아래 코드를 추가하면 사용할 수 있습니다. testImplementation "org.assertj:assertj-core:3.19.0" 참고자료 https://assertj.github.io/doc/#assertj-overview
2022.07.09 -
[assertJ] isEqualTo vs isSameAs 비교
테스트 코드 작성 중 asserThat().isEqualTo랑 asserThat().isSameAs의 차이점이 궁금해서 찾아보게 되었다. 결과부터 말하자면 - isEqualTo : 값 자체를 비교하는 것이다 (ex. 5 == 5, "a" == "b") -> 동등성 비교 - isSameAs : 객체 참조 주소값을 비교하는 것이다. (ex Car a , Car b => a==b) -> 동일성 비교 아래의 그림 2, 3의 코드를 보면 더 자세히 이해할 수 있을것이다.
2022.03.30 -
@Transactional,@Commit
JPA에서 DB 연산(C,R,U,D)은 Transaction 단위 안에서 실행된다. 즉, 트랜잭션이 없는 연산은 실행될 수가 없다. JPA에서는 @Transactional라는 어노테이션을 제공하여 트랜잭션 기능을 제공한다. 실제 코드를 보면서 이해해 보자! 아래의 실제 테스트를 진행 중 그림 1과 같이 오류메시지가 나타났고 확인해 보니 "현재 스레드에 엔티티 매니저가 없다 그래서 persist 함수를 호출할 수가 없다"라는 에러 메시지가 뜬것을 확인할 수 있다. 앞에서 언급했듯이 JPA는 Transcation 단위 안에서 실행되므로 @Transactional 어노테이션을 입력해주면 실행이 된다! @Transactional 어노테이션을 추가 후 실행하였다.(그림 2 참고) 그런데... 실행은 잘 됐는데 D..
2022.03.30 -
단위 테스트
고민 프로젝트 진행 중 테스트를 하면서 각 역할별(domain, repository, service, controller 등...)들의 단위 테스트를 어떻게 작성해야 할지 고민이 생겼다. 먼저 Domain Layer는 객체 생성이라 테스트의 필요성을 느끼지 못하였고 Repository Layer는 EntityManager에 의존하여 기능 대부분을 수행하기에 DB에 데이터가 잘 들어 가는지 확인 과정을 진행하였다. 그런데 대부분의 핵심 로직은 Service Layer에 있다는 것을 인지하게 되었고 그러면 Service Layer는 어떻게 테스트를 진행해야 하는지 궁금해서 구글에 검색 중 좋은 글을 발견하게 되었다. 정리 Service는 Repository에 의존하기 때문에 Service 단의 단위 테스트가..
2022.03.30