TDD에 입각하여프로젝트 진행중이다 TDD 하는 중에 빠른 테스트 코드의 통과를 위하여 별도 @Test @DisplayName("주문에 대한 삭제일 업데이트시 삭제일이 업데이트 되는지 테스트") void When_DeleteSoftly_Expect_DeletedDateUpdated() { // given as @Sql // when orderMapper.deleteSoftly(1L); Order deletedOrder = orderMapper .selectOrderNotDeleted(1L); // then assertThat(deletedOrder .getDeletedDate()).isNotNull(); } }selectOrder 메서드 말고 selectOrderNotDeleted 라는 메서드를 빠르게 ..
@Nested @Sql(scripts = {"classpath:sql/member/insert_member.sql", "classpath:sql/shippinginfo/insert_shipping_info.sql", "classpath:sql/product/insert_product.sql", "classpath:sql/order/insert_order_product.sql", "classpath:sql/order/insert_order.sql"}) class DeleteTest { @Test @DisplayName("주문에 대한 삭제일 업데이트시 true 를 반환하는지 테스트") void When_DeleteSoftly_Expect_MethodReturnTrue() { // given as @Sql /..
RED - GREEN - Refactor로 순서를 요약할 수 있다.RED실패하는 테스트의 작성추가하고자 하는 새로운 기능 혹은 개선사항을 반영해야한다.아직 구현되지 않은 코드의 동작을 지정하는 테스트 케이스기능 명세를 테스트 코드로 먼저 작성하는 것을 말합니다.단순한 더하기 계산기를 만들어보자import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { @Test public void testAddition() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); assertEquals(5, result); } }해당 테스트는..
일단 프로젝트를 진행하면서 크게 느낀 사항이 있다.소스를 먼저 짜놓고 테스트를 돌리는 경우사람의 마음이란게, 최대한 내 소스가 맞다고 생각하고 짜게된다.이건 테스트코드 뉴비의 경우 발생할 수 있는 문제라고 생각도 된다개발자는 내가 작성한 코드에 대해 무의식적인 편향성 을 가지게 된다.내 코드는 내 머릿속에서 올바르게 돌아갈 수 밖에 없다 라는 가정 하에 테스트를 작성하게 되는데,이는 테스트가 진정한 오류 검출의 목적보다 내 코드에 대해 테스트는 정확하게 다 통과하는데? 라는 사고로 코드를 정당화하는 도구로 변질시키게 된다.실제로 테스트 코드의 에서 장바구니 기능의 경우장바구니에서 테스크 코드안의 검증해야할 엣지케이스 가 있음직한 부분에서 실제 버그를 찾아내는 것보다 코드가 통과할 수 있도록 테스트를 조정..
@WebMvcTest 어노테이션스프링 부트에서 제공하는 어노테이션컨트롤러 테스트에 필요한 구성만 로드하여 빠른 테스트가 가능하도록 한다.테스트 대상 컨트롤러 클래스를 지정가능@WebMvcTest(YourController.class) public class YourControllerTest { // ... }MockMvc 스프링 MVC 테스트 지원 핵심 클래스컨트롤러 메서드 호출하고 HTTP 요청/ 응답을 검증가능@Autowired 를 통해 MockMvc 인스턴스 주입@Autowired private MockMvc mockMvc;예시// when + then mockMvc .perform(MockMvcRequestBuilders .get(BASE_URL + "/{userId}/carts", anyStri..