TDD 8

BDD 스타일 Mockito API

BDD는 잘짠 TDD 와 같다. BDD는 말 그대로 행동 주도 개발이다. → 사용자의 행위까지 생각하고 테스트하며 개발한다. 테스크는 Given-When-Then 이라는 양식에 맞춰서 사용한다. 아래는 테스트 코드는 BDD 방식으로 변경한 예시이다. /* Given */ when(memberService.findById(1L)).thenReturn(Optional.of(member)); when(studyRepository.save(study)).thenReturn(study); // when 을 BDD 스타일로 변경하면 given을 사용 given(memberService.findById(1L)).willReturn(Optional.of(member)); given(studyRepository.save..

JAVA 2022.12.26

Mock 객체 stubbing

모든 Mock 객체의 행동 Null 을 리턴한다.( Optional 의 경우에는 Optional.empty 리턴 ) Primitive 타입은 기본 Primitive 값 콜렉션은 비어있는 콜렉션 void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다. stubbing 예제 : when 을 사용하여 findById에 1을 호출하면 member 값을 return 받게 작성해보았다 @Test void createStudyService(){ StudyService studyService = new StudyService(memberService, studyRepository); assertNotNull(studyService); Member member = new Member(); member.setI..

JAVA 2022.12.15

Mockito

mockito 는 mockito-core 와 mockito-junit-jupiter 두가지 의존성을 추가해줘야하는데 애초에 spring boot 프로젝트로 생성을 하면 자동으로 주입되어 있다. 직접 추가하려면 maven repository에서 추가! mockito는 쉽게 말해서 가짜 객체를 만들어 준다고 생각하자! 현재 MemberService는 interface 만 있고 구현되어있진 않다. 이럴때 test code 작성시 MemberService 에 가상의 Mock 인스턴스를 직접 만들어서 사용해야한다. @ExtendWith(MockitoExtension.class) // 이 어노테이션이 있어야 제대로 Mock이 동작한다. class StudyServiceTest { @Mock MemberService..

JAVA 2022.12.14

JUnit5 Assertions

1. assertAll 만약 assertAll을 안쓰면 assertEquals이 실패하면 assertTrue는 실패인지 성공인지 모른다. 따라서 한번에 테스트 결과를 확인하고 싶으면 assertAll로 묶자! → 보통은 여러개 테스트중 하나만 실패해도 다음 테스트를 진행할수 없지만 assertAll은 실패해도 다음 테스트를 진행 할 수 있다.(에러를 한번에 볼수가 있다.) @Test @DisplayName("스터디 만들기") void create_new_study() throws Exception { Study study = new Study(-10); assertAll( () ->assertNotNull(study), () ->assertEquals(StudyStatus.DRAFT, study.getS..

JAVA 2022.12.14

JUnit5 기본 annotation

JUnit5 test에 사용할 수 있는 기본 annotation @Test @BeforeAll / @AfterAll : 모든 테스트 실행 전 혹은 실행 후 딱 한번씩만 실행됨 @BeforeEach / @AfterEach : 각각 테스트들 마다 실행 전 / 실행 후에 매번 실행됨 @Disabled : 여러개의 테스트 메소드중 제외 하고 싶은것에 붙여줌 package me.whiteship.inflearnthejavatest; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; class StudyTest { // junit5 부터 public 이 안붙어도됨 @Test void create() throws Exce..

JAVA 2022.12.14

error serializer

json → object로 변환하는과정 (deserialization) object → json로 변환하는과정 (serialization) 객체는 javaBean 스펙을 준수하고 있어서 BeanSerializer로 json으로 변환이 가능하다. but, errors는 그 스펙을 준수하고 있지 않아 json으로 변환하려면 직접 serializer를 생성해줘야한다. 만약 아래처럼 테스트 코드 작성 시 jsonPath에 지정해준 필드를 응답값으로 받고싶다는 것이다.(Errors에서) 하지만 Errors는 json으로 변환이 불가하기 때문에 ErrorSerializer를 생성해준다. this.mockMvc.perform(post("/api/events") .contentType(MediaType.APPLICAT..

JAVA 2022.07.11

[TEST] 날짜 자동 생성 테스트

test code 작성 중 문제 발생 [문제] createdDate 자동 생성 테스트 코드 작성 중 문제가 발생 → 테스트를 위해 우선 데이터를 삽입 후 날짜를 비교해야 하는데 날짜가 null로 삽입됨 [해결] BaseTimeEntity에 @EntityListeners(AuditingEntityListener.class) 을 이용해 JPA 청취 기능을 하는데 main함수가 있는 클래스에서 JPA 청취 가능을 시켜주지 않으면 사용이 불가하다. 따라서 기능 구현을 할 클래스에 @EnableJpaAuditing 어노테이션을 붙여주면 생성됨 package movie.finder.Repository; import movie.finder.domain.Movie; import movie.finder.repositor..

JAVA 2022.03.03