2016-10-30 2 views
-1

junit 테스트 케이스가 실행될 때 런타임에 @PropertySource의 값을 어떻게 변경할 수 있습니까? 예를 들어,런타임에 @PropertySource 값을 변경하십시오.

나는

@PropertySource(value = "file:${app.deploy.env}/sample/mine.properties", ignoreResourceNotFound = true) 

value = "classpath:sample/mine.properties" 

JUnit 테스트를 실행하여 아래의 값을 대체합니다.

+0

왜 그렇게하고 싶습니까? 코드를 제공하고 달성하고자하는 것을 설명 할 수 있습니까? – developer

+0

음 ...이 방법을 사용하면 어떨까요? 예 :'value = "$ {protocol} : $ {app.deploy.env} /sample/mine.properties"'와 같이 동적 인 부분에 대한 표현식을 넣고 환경에 따라 _file_과 _classpath_ 사이에서 $ {protocol}의 값을 전환하십시오. – kaqqao

답변

2

정말로 원한다면 그렇게 할 수는 있지만 그렇게하지 않는 것이 좋습니다. 먼저 PropertySource에 어떤 값이 들어 있는지 알아야합니다. 귀하의 예에서 해당 주석이 있으므로 PropertySource이 일반 인스턴스에 추가됩니다 (아마도 첫 번째 인스턴스로).

당신은 당신이 ConfigurableEnvironment으로 그 변경과 환경에 getMutablePropertySources()에 취소 전화를 통해 PropertySource를 검색 할 관리 빈에 Environment를 삽입 할 수 있습니다.

그런 말을하고 있습니다. 왜? 애플리케이션의 이러한 기본 속성을 변경하면 앱에서 발생할 일을 대표하게됩니다. Spring 러너를 사용하고 있고 다른 테스트 방법에서 다른 설정으로 앱을 시작하고 싶습니다. 그것이 당신이하고 싶은 일이라면 주자를 사용하지 말고 직접 컨텍스트를 관리하십시오. 그렇게 어렵지는 않습니다.

예를 들어 JMS-related tests은 다양한 시나리오를 테스트하기 위해 Environment을 변경합니다. easily load the context with a specific set of keys@After method makes sure to shutdown the context for each test 수 있습니다.

우리는 Spring Boot에서이 패턴을 사용합니다. 사실 저는 몇 달 동안 할 일 목록에있는 모든 것을 쉽게 처리 할 수있는 JUnit 규칙을 가지고 있습니다.

+0

감사. 사실 나는 리소스 디렉토리 아래에 속성 파일을 가지고 있으며, dev, qa와 같은 다른 환경을위한 config 디렉토리 아래에 있습니다. 내 응용 프로그램은 데비안 패키지로 빌드되며 다른 환경에 설치하는 동안 시작 스크립트로 스프링 부트 항아리를 시작하고 app.deploy.env와 같은 java 인수를 전달합니다. 그래서 junit이 jenkins에서 실행될 때 리소스 아래에 속성 파일을로드하고 단위 테스트를 실행한다고 말하고 싶습니다. – Harshana

+0

필자는 maven 빌드 명령과 함께 java 인수를 전달할 수 있음을 알게되었습니다. 그래서 app.deploy.env로 응용 프로그램을 빌드하면 단위 테스트가 성공적으로 실행되도록 리소스 폴더 아래의 속성 파일을 가리킬 것이라고 생각했습니다. 그것의 간단하고 나도 런타임에 @PropertySource 값을 변경하지 않아도됩니다. – Harshana

관련 문제