반응형
스프링 부트 테스트 구성
다음과 같은 메인 클래스의 스프링 부트 애플리케이션을 사용하고 있습니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
이제 서비스를 테스트하고 기본 테스트 클래스를 만듭니다.
@SpringApplicationConfiguration(Application.class)
public abstract class TestBase {
}
테스트를 실행하면 예외가 발생합니다.
Caused by: java.lang.IllegalArgumentException: Can not load an ApplicationContext with a NULL 'contextLoader'. Consider annotating your test class with @ContextConfiguration.
at org.springframework.util.Assert.notNull(Assert.java:115)
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:117)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148)
다음으로 Context Configuration을 사용하여 기본 테스트클래스를 변경합니다.
@ContextConfiguration(classes = Application.class)
public abstract class TestBase {
}
이번에는 Data Source 초기화 오류가 발생합니다.첫 번째 케이스에서 장애가 발생한 이유와 두 번째 케이스에서는 데이터 소스를 설정한 application.properties가 로드되지 않는 이유가 궁금합니다.
감사해요!
뭐 이런 거:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTest{
@Autowired
Foo foo; //whatever you are testing
@Test
public void FooTest() throws Exception{
Foo f = foo.getFooById("22");
assertEquals("9B", f.getCode);
}
//TODO look into MockMVC for testing services
}
를 사용한 테스트의 예
- 스프링 부트
- 스프링 부트 테스트 설정
- 쥬니트 5
- 프리마커
이 모든 것이 다음과 같이 간단하지는 않습니다. :) 를 확인하는 데 오랜 시간이 걸렸습니다.
설정:
@TestConfiguration
@PropertySource(value = "classpath:test.properties", encoding = "UTF-8")
public class GlobalConfig {
@Bean(name = "JsonMapper")
public JsonMapper jsonMapper() {
return new JsonMapper();
}
@Bean(name = "ObjectMapper")
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
@Bean(name = "Mapper")
public Mapper dozer() {
return new DozerBeanMapper();
}
@Bean(name = "Validator")
public Validator validator() {
return new DefaultValidatorAdapter();
}
}
실제 테스트 파일:
import freemarker.template.Configuration;
import global.GlobalConfig;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = {GlobalConfig.class, MessagePersistManager.class, TemplateManager.class, FileOperationsManager.class, Configuration.class})
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class MessagePersistManagerTest {
@Autowired
private MessagePersistManager messagePersistManager;
@Autowired
private TemplateManager templateManager;
@Autowired
private FileOperationsManager fileOperationsManager;
@Autowired
private Configuration freemarkerConfiguration;
@Value("${channel.outbound.ftp.local.directory}")
private String sepaFilesBasePath;
@BeforeAll
private void init() throws Exception {
System.out.println("Creating Base Dir=" + sepaFilesBasePath);
Files.createDirectories(Paths.get(sepaFilesBasePath));
/* FreeMarker Configuration */
freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "/templates/");
}
@AfterAll
private void destroy() throws Exception {
System.out.println("Deleting Base Dir=" + sepaFilesBasePath);
FileUtils.deleteDirectory(new File(sepaFilesBasePath));
}
@Test
void persistSepaFile() {
messagePersistManager.persistSepaFile("sepaWinnings.xml", generateData());
System.out.println("e");
assert (true);
}
이니셜라이저를 사용해야 합니다.
아래 질문을 참조해 주세요.
application.properties에서 데이터베이스 구성을 채우지 않는 스프링 테스트
스프링 부트, 통합 테스트 케이스를 통해 yml 속성 읽기
나도 같은 문제에 직면했다. 왜냐하면 내 서블릿이이니셜라이저가 다른 패키지에 들어 있었습니다.패키지 구조를 수정한 후 문제가 해결되었습니다.
언급URL : https://stackoverflow.com/questions/38469706/spring-boot-test-configuration
반응형
'source' 카테고리의 다른 글
변수가 리스트인지 태플인지 검정 (0) | 2023.03.15 |
---|---|
프로그래밍 방식으로 새 워드프레스 페이지를 만드는 방법 (0) | 2023.03.15 |
Wordpress - 사용자 지정 게시 유형에 피처링 이미지 메타 상자가 표시되지 않음 (0) | 2023.03.15 |
Ajax 업데이트/렌더 컴포넌트의 클라이언트 ID를 확인하는 방법식 "foo"가 "bar"에서 참조되는 구성 요소를 찾을 수 없습니다. (0) | 2023.03.15 |
어떻게 하면 경고를 피할 수 있을까요? 청크 스타일 [mini-css-extract-plugin]개츠비 JS의 모순된 순서? (0) | 2023.03.15 |