TDD
-
-
[TDD] @Ignore @DisabledTDD 2024. 9. 11. 17:31
OpenAI API 키를 감추려고 application.properties 파일을 추가하니잘돌아가고 잘 올라가던 test 코드에서 application context를 로드 못한다는 에러가 자꾸 터졌다 그래서 모든 테스트 다 주석처리하고 올리긴 했는데이제 방법을 찾았다 그냥 @Ignore @Disabled 어노테이션으로 테스트 클래스 위에 적어주면 해당 테스트는 무시되서 주석처리할 필요가 없다 junit5 사용시에는 @Disabled 하면 먹힌다 그리고 단위테스트 들이 잘 돌아가면 단위테스트에는 사용안하고@Disabled@SpringBootTest@ActiveProfiles("test")class PuppyAlertApplicationTests { @Test void contextLoads() { }}..
-
[TDD] @DataJpaTestTDD 2024. 9. 10. 23:11
JPA와 관련된 @Component 들만 로딩하여 단위테스트를 진행해준다그래서 @Entity @Repository Bean들만 스캔하여 단위테스트를 진행한다 기본적으로 @DataJpaTest라는 어노테이션이 붙어 있으면 Transactional이고 각 테스트 종료 후 롤백이 된다.여기서는 인메모리 데이터 베이스를 사용한다고 하는데 이것때문에 에러가 나기도 해서, 나는 실제 내가 사용하는 MySQL 메모리로 테스트 하기위해 적힌 대로 @AutoConfigureTestDatabase를 써서 replace.None 값으로 변경해주었다. 영속성 컨텍스트도 적용된다따라서 repository.save() 하면 영속성 컨텍스트 안에 저장하고 repository.findbyId() 하면 영속성 컨텍스트 안에서 찾는거임..
-
[TDD] @SpyTDD 2024. 9. 1. 01:33
The Spy is a wrapper created on an actual instance of the object that lets you call the real methods of that object unless the method is stubbed. It is based on the concept of partial mocking, where you want to test some real methods and mock only a few methods in a class. Spy 객체는 껍데기만 있는 Mock 객체와 다르게 실제로 구현된 기능이 돌아가는 객체이다. Spy 객체의 일부 기능을 Mock 객체처럼 Stub할 수 있다. public class SpyWithAnnotationTe..
-
[TDD] @Mock vs @MockBeanTDD 2024. 8. 31. 22:12
[Mock 객체를 스프링 컨텍스트에 의해 로드된 Bean 에 주입하고 싶을때] @SpringBootTest (실제 Spring Context를 로드하고)+ @Autowired (테스트할 대상을 실제 Bean으로 의존성 주입 받겠다)+ @MockBean (그럼 해당 @Autowired로 사용될 Bean에 Mock Bean을 넣어줘야한다)Spring Context에 의해 로드된 Bean을 대상으로 테스트를 진행할때는해당 Bean에 일반적인 Mock 객체가 아닌, "MockBean" 객체를 주입시켜줘야한다 [Mock 객체를 Mock 객체에 주입하고 싶을때] @ExtendWith(MockitoExtension.class) (Mockito 기반 테스트 코드를 작성하겠다)+ @InjectMocks (그리고 테스트할..
-
[TDD] Mockito annotations.zipTDD 2024. 8. 31. 22:03
[@ExtendWith(MockitoExtension.class)] Mockito 확장 기능을 사용해 단위 테스트를 수행할 수 있도록 해주는 어노테이션이 어노테이션을 통해 Mockito가 @Mock, @Spy, @InjectMocks 등의 어노테이션을 인식하고 해당 객체들을 생성하거나 주입할 수 있게 해줌 단위 테스트는 Spring Context 즉 스프링 컨테이너를 로드하지 않기 때문에 우리가 직접 @Mock 를 통해 목객체를 생성하고 @InjectMocks를 통해 해당 mock 객체를 주입받을 놈을 선언해줘야함 [@InjectMocks] @Mock, @Spy 등 Mock 객체들을 주입받을 놈을 선언하는 어노테이션특정 테스트에서의 주인공? 이라고 생각하면 됨 주로 서비스 계층 test에서 쓰이며 서비스..
-
[TDD] @WebMvcTest vs MockMvcBuilders.standaloneSetupTDD 2024. 8. 31. 21:17
보라색은 개발자가 직접 작성해야하는 것들파란색은 TestCase를 작성한 방식과 부여한 어노테이션에 따라 Spring이 알아서 제공해준다 1. TestCase 내에서 MockMvc를 생성한다. 이 MockMvc는 테스트할 컨트롤러와 상호작용하는데 필요함2. MockMvc가 TestDispatcherServlet에게 원하는 URL로 요청을 보낸다.이때 MockMvc의 MockMvcRequestBuilders 함수를 사용해서특정 요청에 필요한 HttpMethod를 지정, requestparameter 지정, 헤더, 쿠키등을 설정할 수 있다 3. TestDispatcherServlet이 프로젝트 내에서 개발자가 구현한 그리고 해당 테스트에서 테스트하겠다고 명시한 Controller로 2번에서 생성한 reque..
-
[TDD] Spring Boot 테스트 종류TDD 2024. 8. 31. 16:29
테스트 사용시 무거운 순서전체 어플리케이션 > Controller > Service > Repository 순 @SpringBootTest(전체 어플리케이션) > @WebMvcTest(Controller) > @InjectMocks + @Mock(Service) > @DataJpaTest(Repository) [@SpringBootTest 통합테스트] 통합 테스트를 제공하는 가장 기본적인 어노테이션 실제 어플리케이션 환경과 똑같은 테스트 환경 제공SpringContext가 로드되면서 실제 빈들이 생성되고 스프링 컨테이너가 제공됨testImplementation 'org.springframework.boot:spring-boot-starter-test'어플리케이션이 실행될때의 컴포넌트 스캔 범위와 동일하다..
-
[TDD] H2DatabaseTDD 2024. 2. 13. 21:25
[h2 database] 1. localhost로 테스트 개발을 할때 주로 사용되는 소규모 DB2. java로 작성된 오픈소스 RDBMS(Relational Database)이고spring boot가 지원하는 인메모리 관계형 데이터베이스임3. 인메모리로 띄우면 애플리케이션을 재시작할때마다 초기화된다 중요한게 본체는 콘솔창이다. 본체가 cmd 창임뜨는 웹화면은 그냥 SQL 쿼리문에 대한 GUI 제공하는 용임 즉 콘솔창 닫으면 웹화면으로 쿼리 날려도 연결안됨쿼리 GUI 사용할때는 무조건 콘솔창 남겨놔야됨. 즉 서버 계속 띄워놔야되는거임 이건 당연한거 ㅇㅇ 이거 뿐만 아니라 그냥 @Test 할때나 spring으로 테스트할때도 무조건 콘솔창은 띄워놔야하는거임[.db file] h2 데이터베이스를 실행하면 생성되..