Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- DDL
- 필드 주입
- VUE
- AOP
- 재정의
- SQL
- lambda
- select_type
- 테스트 코드
- java
- redis
- static
- Spring
- jpa
- 인덱스
- 바이너리 카운팅
- MSA
- 열 속성
- cache
- KEVISS
- docker
- DI
- Test
- StringBuilder
- 생성자 주입
- jwt
- hashcode
- stream
- 조합
- equals
Archives
- Today
- Total
백엔드 개발자 블로그
테스트 본문
Junit
설정
build.gradle에 dependency에 추가
- testImplementation('org.springframework.boot:spring-boot-starter-test')
통합
@SpringBootTest : 다 불러와서 무거워짐 -> 필요한 class만 부르기 가능
Controller
- @WebMvcTest(Controller이름.class) : 사용할 Controller scan
- @MockBean : 사용할 Service 가짜객체 사용
- @Autowired : mvc에 가짜객체 주입
- @Test : 테스트 함수 지정
- given : 입력, 결과
- Product productStub = new Product("product-test"); productStub.setProductId("fc00ddb5-9f05-40a0-beb9-4ea5431379c0"); given(sampleService.getProduct(any())) .willReturn(productStub);
- when : 실행
- final ResultActions actions = mockMvc.perform(MockMvcRequestBuilders.get("/user/getProduct").param("productId", productId));
- then : 확인
- actions .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$.productId").value(productId));
Service
- @ExtendWith(MockitoExtension.class) : Scan
- @Mock : Service에 DI 할 class 가짜 객체 생성
- @InjectMocks : 사용하는 Service에 생성한 가짜 객체들 주입
- @Spy private ModelMapper modelMapper : modelMapper(entity - > dto) DI
- @Test : 테스트 함수 지정
- 테스트 함수 작성
- given : 인수, mock 객체의 함수 결과값, 예상값 설정
- // 인수 productId = "yg" // mock 객체의 함수 결과값 given(productRepo.findById(any())).willReturn(Optional.of(new Product("product-test")));
- when : 함수 실행
- 변수 = Service.method(인수);
- then : 결과 확인
- // null 확인 assertNotNull(product); // 값 비교 assertThat(결과값).isSameAs(예상값); // 에러 확인 Assertions.assertThrows(Exeption class, () -> Service method);
- 테스트 함수 작성
Repository
보통 안함
- H2 vs JDBC
- H2인 경우 추가
- @AutoConfigureTestDatabase(replace = Replace.NONE)
- 자동을 설정되는 DB 정보를 사용하지 않고
- @Import(H2ServerConfiguration.class)
- H2ServerConfiuration을 씀
- H2인 경우 추가
- @DataJpaTest : 사용할 Repository scan
- @Autowired : 테스트 : respository에 필요한 의존 객체 주입
- @Test : 테스트 함수 지정
- @Test void testSave() { // given Product product = new Product(); product.setProductName("tset-prd"); List<Item> items = new ArrayList<Item>(); for(int i = 0 ; i < 4 ; i++) { Item item = new Item(); item.setItemId("test-item-"+i); item.setItemName("test-item-"+i); item.setItemNumber("test-item-"+i); item.setProduct(product); } product.setItems(items); productRepo.save(product); // when String productId = product.getProductId(); Product findProduct = productRepo.findById(productId).orElse(null); // then Assertions.assertNotNull(findProduct); Assertions.assertEquals(findProduct.getProductId(), productId); }
Spock
- 함수이름 한글로도 가능
- 코드블록으로 구분되어있음(given,when,then)
- Junit 요소들 모두 제공
- 중복코드 제거 가능(where)
웹
- PostMan
'Test' 카테고리의 다른 글
테스트 코드 성능 개선기 (0) | 2024.05.09 |
---|---|
테스트 코드 (0) | 2024.05.08 |
성능 테스트 (0) | 2024.03.18 |
Spock을 통한 단위 테스트 (0) | 2023.08.22 |