기본 속성이 application.properties
클래스 경로 (src / main / resources / application.properties) 의 파일에 설정된 Spring-Boot 응용 프로그램이 있습니다.
test.properties
파일에 선언 된 속성 (src / test / resources / test.properties)으로 JUnit 테스트의 일부 기본 설정을 재정의하고 싶습니다.
일반적으로 Junit 테스트를위한 전용 구성 클래스가 있습니다.
package foo.bar.test;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
}
먼저 @PropertySource("classpath:test.properties")
TestConfig 클래스에서 사용 하면 트릭을 수행 할 것이라고 생각했지만 이러한 속성은 application.properties 설정을 덮어 쓰지 않습니다 (Spring-Boot Reference Doc- 23. Externalized Configuration 참조 ).
그런 다음 -Dspring.config.location=classpath:test.properties
테스트를 호출 할 때 사용하려고했습니다 . 성공했지만 각 테스트 실행에 대해이 시스템 속성을 설정하고 싶지 않습니다. 따라서 코드에 넣었습니다.
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
static {
System.setProperty("spring.config.location", "classpath:test.properties");
}
}
불행히도 다시는 성공하지 못했습니다.
내가 간과해야했던 application.properties
JUnit 테스트의 설정 을 무시하는 방법에 대한 간단한 해결책이 있어야합니다 test.properties
.
답변
의 @TestPropertySource
값을 재정의 하는 데 사용할 수 있습니다 application.properties
. javadoc에서 :
테스트 특성 소스를 사용하여 시스템 및 애플리케이션 특성 소스에 정의 된 특성을 선택적으로 대체 할 수 있습니다.
예를 들면 다음과 같습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ExampleApplication.class)
@TestPropertySource(locations="classpath:test.properties")
public class ExampleApplicationTests {
}
답변
src/test/resources/application.properties
다음 주석을 사용하면 스프링 부트가 자동으로로드 됩니다.
@RunWith(SpringRunner.class)
@SpringBootTest
따라서 자동 구성을 사용하도록 이름 test.properties
을 바꿉니다 application.properties
.
속성 파일을 (환경으로) * 로드 * 해야하는 경우 여기에 설명 된대로 다음을 사용할 수도 있습니다.
@RunWith(SpringRunner.class) @ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
[ 업데이트 : 테스트를 위해 특정 속성 재정의 ]
- 추가하십시오
src/main/resources/application-test.properties
. - 로 테스트 클래스에 주석을 답니다
@ActiveProfiles("test")
.
이 부하 application.properties
및 후 application-test.properties
정의 된 규칙에 따라 테스트 케이스를위한 애플리케이션 컨텍스트에 등록, 여기 .
데모-https: //github.com/mohnish82/so-spring-boot-testprops
답변
메타 주석 을 사용 하여 구성을 외부화 할 수도 있습니다 . 예를 들면 다음과 같습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@DefaultTestAnnotations
public class ExampleApplicationTests {
...
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@SpringApplicationConfiguration(classes = ExampleApplication.class)
@TestPropertySource(locations="classpath:test.properties")
public @interface DefaultTestAnnotations { }
답변
@SpringBootTest
주석을 사용하는 경우 테스트에서 몇 가지 속성을 재정의하는 데 적합한 다른 방법입니다 .
@SpringBootTest(properties = {"propA=valueA", "propB=valueB"})
답변
TLDR :
그래서 내가 한 것은 표준 src/main/resources/application.properties
과 src/test/resources/application-default.properties
모든 테스트에 대한 일부 설정을 재정의하는 것입니다.
전체 이야기
나는 같은 문제에 부딪 쳤고 지금까지 프로파일을 사용하지 않았습니다. 지금해야 할 일이 귀찮고, 잊어 버릴 수있는 프로파일을 선언하는 것을 기억하십시오.
요령은 프로파일 특정 application-<profile>.properties
이 일반 프로파일의 설정을 대체 한다는 것입니다 . https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties를 참조 하십시오 .
답변
간단한 설명 :
당신이 나 같은과 같은이있는 경우 application.properties
에 src/main/resources
하고 src/test/resources
, 그리고 당신이 궁금 왜 ‘ application.properties
테스트 폴더가되지 않는 무시 을 application.properties
주요 자원으로 읽어 …
당신이 application.properties
아래에 src/main/resources
있고 같은 application.properties
아래 src/test/resources
에있는 경우 application.properties
, 테스트를 실행하는 방법에 달려 있습니다 . 폴더 구조 src/main/resources
와는 src/test/resources
, 당신처럼 테스트를 실행 그렇다면, 메이븐 건축 관례 mvnw test
또는 gradlew test
의 application.properties
에서이 src/test/resources
같이 집어 얻을 것이다 테스트 클래스 패스가 선행됩니다 주요 클래스 경로를. 이 같은 테스트를 실행한다면, Run as JUnit Test
Elipse / STS에서의 application.properties
에서이 src/main/resources
같이 집어 얻을 것이다 주요 클래스 경로에 선행 테스트 클래스 패스.
를 열어서 확인할 수 있습니다 Run > Run Configurations > JUnit > *your_run_configuration* > Click on "Show Command Line"
.
다음과 같은 것을 보게 될 것입니다 :
XXXbin \ javaw.exe -ea -Dfile.encoding = UTF-8 -classpath XXX \ workspace-spring-tool-suite-4-4.5.1.RELEASE \ project_name \ bin \ main; XXX \ workspace-spring-tool-suite-4-4.5.1.RELEASE \ project_name \ bin \ test;
당신이 볼 수행 주요 \ 먼저, 다음 \ 테스트 ? 맞아, 클래스 패스에 관한 모든 것 🙂
건배
답변
I just configured min as the following :
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
# changing the name of my data base for testing
spring.datasource.url= jdbc:h2:mem:mockedDB
spring.datasource.username=sa
spring.datasource.password=sa
# in testing i don`t need to know the port
#Feature that determines what happens when no accessors are found for a type
#(and there are no annotations to indicate it is meant to be serialized).
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false`enter code here`