Open berryberrybin opened 1 year ago
// 고정메시지를 반환하는 클래스
@Service
public class MessageService {
public String getMessage() { regurn "Hello!!"; }
}
// 고정 메시지를 반환하는 클래스의 JUni 테스트 케이스
public class MessageServiceTest {
@Test
public void testGetMessage() {
MessageService service = new MessageService();
String actualMessage = service.getMessage();
assertThat(actualMessage, is("Hello!!"));
}
}
스프링이 제공하는 MessageSource 인터페이스를 이용해 외부에서 메시지를 가져오는 구현클래스를 테스트 하는 방법
// MessageSource에서 메시지 취득하는 클래스
@Service
public class MessageService {
@Autowired
MessageSource messageSource;
public String getMessageByCode( String code ) { return messageSorce.getMessage(code, null, Locale.getDefault( ) ); }
}
```java
// MessageSource에서 메시지를 가져오는 클래스의 JUnit테스트 케이스
// Mockito를 사용해 MessageSource를 모의화한 테스트 케이스
@RunWith(MockitoJUnitRunner.class)
public class MessageServiceTest {
// MockitoJUnitRunner를 이용해 테스트할 컴포넌트(@InjectMocks를 부여한 컴포넌트)에 모의화한 컴포넌트(@Mock이나 @Spy를 붙인 컴포넌트)를 인젝션 할 수 있게 함
@InjectMocks
MessageService service;
@Mock
MessageSource mockMessageSource;
@Test
public void testGetMessageByCode() {
doReturn("Hello!!").when(mockMessageSource).getMessage("greeting",null, Locale.getDefault());
// MessageSource의 목을 설정했음. 'greeting'이라는 코드가 지정될때 'Hello!!'가 반환하게 함
String actualMessage = service.getMessageByCode("greeting");
assertThat(actualMessage, is("Hello!!"));
}
}
// 자바 기반 설정 방식을 이용한 빈 정의
@Configuration
@ComponentScan("com.exaple.domain") // 컴포넌트 스캔을 활성화
public class AppConfig {
@Bean // MessageSource의 빈정의
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages");
return messageSource;
}
}
// message.properties 정의 예시
greeting=Hello!!
@Autowired를 사용해 DI 컨테이너에 등록할 테스트 대상 빈을 인젝션함
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=AppConfig.class) //
public class MessageServiceIntegrationTest {
@Autowired
MessageService service;
@Test
public void testGetMessageByCode( ) {
String actualMessage = service.getMessageByCode("greeting");
// 인젝션된 빈의 메서드를 호출해서 DI컨테이너에 의해 의존 관계가 결합된 컴포넌트를 테스트함
assertThat(actualMessage, is("Hello!!");
}
}
greeting=Bonjour!!
로 바꿔서 다시 테스트해보면 실패하는 것을 통해 제대로 컴포넌트가 통합된 것을 재확인 가능
스프링 테스트 (Spring Test)
@Controller, @Service, @Repository, @Component
등이 붙은 클래스 )를 테스트 하는 모듈단위 테스트
와통합 테스트
로 나눠서 테스트하는 것이 일반적단위 테스트
통합 테스트