ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링부트 Web-Flux 03 - 2 - WebFlux 조금 더 깊게 보기(Juit Test)
    카테고리 없음 2021. 10. 26. 10:21

    유투버 '데어 프로그래밍'님 강의 참조 

     

     

     

     

    01 Junit 컨트롤러 테스트

     

    1) 통합 테스트 코드

    @SpringBootTest
    @AutoConfigureWebTestClient
    public class CustomerControllerTest {
    
    	@Autowired
    	private WebTestClient webClient;
    	
    	@Test
    	public void findOneTest() {
    		
    	}
    }

     

     

     

    2) 필수 컨트롤러 테스트

    @WebFluxTest
    public class CustomerControllerTest {
    	
    	@MockBean
    	private CustomerRepository customerRepository;
    
    	@Autowired
    	private WebTestClient webClient;
    	
    	@Test
    	public void findOneTest() {
    		Mono<Customer> givenData = Mono.just(new Customer("Jack", "Bauer"));
    		when(customerRepository.findById(1L)).thenReturn(givenData);
    		webClient.get().uri("/customer/{id}", 1L)
    		.exchange()
    		.expectBody()
    		.jsonPath("$.firstName").isEqualTo("Jack")
    		.jsonPath("$.lastName").isEqualTo("Bauer");
    	}
    }
    1. @MockBean으로 가짜 레퍼지토리를 띄어서 실제 DB에 있는 데이터를 들고 올 수 있도록 하고
    2. @Autowired로 WebTestClient가 가능하도록 메모리에 띄우고
    3. 현재 원하는 테스트는 실제 만들어 놓은 컨트롤러의 'findById' 이므로 이 컨트롤러가 테스트 되도록 함수 세팅
    4. 하나만 불러오는 테스트이니 Mono<>를 써서 데이터를 강제 세팅
    5. when()(STUB이라고 부름)을 써서 when("") 안이 실행되면 thenReturn() 값을 돌려 주게 됨
    6. webClient를 이용하여 'findById' 컨트롤러 테스트가 되도록 똑같은 uri를 세팅
    7. json 형태로 강제로 넣은 데이터를 받아 옴

    여기서는 데이터 테스트가아닌 컨트롤러가 잘 불러지는지 테스트임

     

     

     

     

     

    02 Junit 레파지토리 테스트

    @DataR2dbcTest
    @Import(DBinit.class)
    public class CustomerRepositoryTest {
    
    	@Autowired
    	private CustomerRepository customerRepository;
    	
    	@Test
    	public void findOneTest() {
    		customerRepository.findById(1L).subscribe((c)->{
    			System.out.println(c);
    		});
    	}
    }
    1. 레파지토리 및 DB 테스트이므로 @DataR2dbcTest가 필요
    2. DB에 접근하려면 DBinit 클래스가 필요하므로 @Import 해줌
    3. DB테스트 이므로 그대로 원하는 레퍼지토리를 @Autowired 해줌
    4. 그리고 원하는 테스트 함수를 만들어 레파지토리에서 꺼내오는 테스트

    굿!

     

     

    • 여기에 추가로 데이터 유효성 검사 진행을 해주는게 좋다.
    @DataR2dbcTest
    @Import(DBinit.class)
    public class CustomerRepositoryTest {
    
    	@Autowired
    	private CustomerRepository customerRepository;
    	
    	@Test
    	public void findOneTest() {
    		
    		StepVerifier
    		.create(customerRepository.findById(2L))
    		.expectNextMatches((c) -> {
    			return c.getFirstName().equals("Chloe");
    		})
    		.expectComplete()
    		.verify();
    	}
    }
    • 디비에 있는값과 맞는지 StepVerifier를 이용하여 맞춰 보는 것. Boolean으로 리턴되기때문에 값이 맞으면 True 아니면  False를 리턴함

    굿!

     

     

Designed by Tistory.