BackEnd/TDD9 [RestAssured] Multiparts 테스트 작성시 Json데이터와 File을 함께 보내기 (Cannot serialize because cannot determine how to serialize content-type multipart/form-data) 1. 문제의 상황 이번 문제는 기존의 Json만 전달하면 RestAssured 테스트 코드에서 multiparts를 전달하다 보니 발생한 문제였다. 우선 다음과 같이 (Json데이터 + multipart form data)를 함께 보내려 한다. 이를 받는 컨트롤러는 다음과 같다. @PostMapping("/api/sessions") public ResponseEntity createNewSession( @RequestPart @Valid SessionRequest request, @RequestPart List files) { SessionDto session = toDto(request); long currentGenerationId = generationService.getActiveGeneratio.. BackEnd/TDD 2023. 2. 28. SpringBoot에 Test Container적용 (MySQL, Redis) 도커와 테스트 (TestContainers) 테스트를 위해서는 운영과 동일한 형태의 개발 환경에서 테스트 하는 것이 중요하다. 하지만 매번 동일하게 환경을 구축할 수 없고 모든 개발 자들과 같은 환경을 맞추기도 쉽지 않다. 이를 Test Container를 통해 해결해 보자! (단점 테스트 수행 속도가 느려짐 → 다행이 이는 컨테이너를 한번만 인스턴스화 하는 방식으로 해결가능) (중요) Docker는 켜져 있어야 합니다!!! Docker Container를 활용한 일회용 인스턴스를 제공하는 JUnit 테스트 라이브러리를 말합니다. JUnit 5 Quickstart JUnit 5 Quickstart - Testcontainers for Java JUnit 5 Quickstart It's easy to ad.. BackEnd/TDD 2022. 12. 13. [TDD] 테스트를 위한 생성자, 메서드 피하는 방법 스스로 공부하다 경험했던 문제를 해결하기 위해 1. 문제 상황 테스트를 작성하다 보면 검증을 위해 id값을 직접 객체에 추가해줘야 하는 경우들이 있다. 하지만 JPA를 사용할 경우 프로덕션 코드에서는 생성자로 id를 직접 추가해주지 않아도, auto increment를 사용하게 되기 때문에 id값을 직접 할당할 필요가 없다. 따라서 단지 테스트 만을 위한 용도로 id값을 받는 생성자를 만들게 되는 점이 매우 거슬렸다. 예시를 통해 문제의 상황을 구체화 해보자! 우선 우리의 도메인을 시각화하면 다음과 같다. 다음과 같은 예시 코드를 살펴보자. @DisplayName("구간을 성공적으로 추가한다") @Test public void add_section_test() { // given Line line = n.. BackEnd/TDD 2022. 7. 26. [TDD] JUnit 만들기 - 2 해당 글은 TDD: By Example 책의 2부 내용인 Python으로 xUnit 만들기를 Java 코드로 변경하여 스스로 만든 내용입니다. 총 2개의 글로 작성될 예정입니다. 1. Junit 만들기 1부 2. Junit 만들기 2부 코드 또한 Github에 올려두었으니 확인 가능하십니다! https://github.com/zbqmgldjfh/xUnit GitHub - zbqmgldjfh/xUnit: JUnit 직접 구현하기 JUnit 직접 구현하기. Contribute to zbqmgldjfh/xUnit development by creating an account on GitHub. github.com 이전까지 작성한 TODO list를 보면 다음과 같다. - [x] 테스트 메서드 호출하기 - [x.. BackEnd/TDD 2022. 7. 15. [TDD] JUnit 만들기 - 1 해당 글은 TDD: By Example 책의 2부 내용인 Python으로 xUnit 만들기를 Java 코드로 변경하여 스스로 만든 내용입니다. 총 2개의 글로 작성될 예정입니다. 1. Junit 만들기 1부 2. Junit 만들기 2부 코드 또한 Github에 올려두었으니 확인 가능하십니다! https://github.com/zbqmgldjfh/xUnit GitHub - zbqmgldjfh/xUnit: JUnit 직접 구현하기 JUnit 직접 구현하기. Contribute to zbqmgldjfh/xUnit development by creating an account on GitHub. github.com 예전에 켄트 백의 TDD를 읽다 쳅터 2에서 막힌 적이 있다. 애당초 코드가 Python이라 가독.. BackEnd/TDD 2022. 7. 15. [junit5] MockMvc에서 NestedServletException 통과시키기 직접 경함한 오류를 해결한 과정을 정리한 글 입니다. 1. 상황 우선 저의 코드에서 UserService는 인자로 받은 userId로 회원을 찾아보는데, 이때 만약 회원이 없다면 예외를 던지게 됩니다. @Service public class UserService { private final UserRepository repository; public UserService(UserRepository repository) { this.repository = repository; } // 생략... public User findUserById(String userId) { return repository.findById(userId) .orElseThrow(() -> new NotFoundException(U.. BackEnd/TDD 2022. 3. 11. [TDD] 테스트 코드 작성 팁 (2/2) 해당 글은 "테스트 주도 개발 시작하기 - 최범균 저" 의 10장 내용을 공부, 기록겸 요약한 글 입니다. 지난 번 글에 이어서, 나머지 5가지 테스트 작성의 팁에 대하여 알아보자. 6. 실행 환경이 다르다고 실패하지 않기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 같은 테스트 메소드가 실행 환경에 따라 성공하거나 실패하면 안된다. 로컬 개발 환경에서는 성공하는데 빌드 서버에서는 실패한다거나 윈도우에서는 성공하는데 맥 OS에서는 실패하는 식으로 테스트를 실행하는 환경에 따라 테스트를 다르게 동작하면 안된다. 이 전형적인 예가 바로 파일경로이다. public class BulkLoaderTest{ private String bulkFilePath = "d:\\mywor.. BackEnd/TDD 2022. 1. 30. [TDD] 테스트 코드 작성 팁 (1/2) 해당 글은 "테스트 주도 개발 시작하기 - 최범균 저" 의 10장 내용을 공부, 기록겸 요약한 글 입니다. 유지보수하기 좋은 코드를 만들기 위해 필요한 좋은 패턴과 원칙이 존재하는 것처럼 좋은 테스트 코드를 만들려면 몇가지 주의해야할 사항이 있다. 1. 두 개 이상을 검증하지 않기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 처음 테스트코드를 작성하면 한 테스트 메소드에 가능한 많은 단언을 하려고 시도한다. 그 과정에서 서로 다른 검증을 섞는 경우가 있다. @DisplayName("같은 ID가 없으면 가입에 성공하고 메일을 전송함") @Test void registerAndSendMail(){ userRegister.register("id","pw","email"); .. BackEnd/TDD 2022. 1. 28. [Mockito] Mock 객체 만들기, Mock 원리, 프록시 원리 너무 궁금해서 미칠것 같은 내용을 공부후 정리한 내용입니다. 영혼을 갈아서 정리해 보았습니다! 항상 모든 인터페이스의 구현체를 만들어야만 테스트가 가능할까요? 컨트롤러를 테스트 하고 싶은데, 서비스의 구현체 없이 인터페이스 만을 활용하여 테스트 할수는 없는것 일까요? 이에 대한 궁금증에서 시작한 공부 내용을 정리해 봅니다. ▶ 목차 1. Mock의 의미 2. Mock 객체 만들기 3. CGLIB 프록시를 활용한 Mock의 원리 이해하기 Mock? Mocking? MockUp? " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 - Mock의 의미는 "테스트를 위해 만든 모형" 을 의미합니다. - Mocking의 의미는 테스트를 위해 실제 객체와 비슷한 모의 객체를 만든는 것을.. BackEnd/TDD 2022. 1. 21. 이전 1 다음