2017-12-28 41 views
1

내 응용 프로그램을 개발했으며 몇 가지 키 - 값 속성이 포함 된 .properties 파일이 있습니다. 나는 내 코드의 내부에 모든 @Value을 확인 할 수있는 방법을 찾고 있어요JUNIT을 통해 특성 주입 정확성을 테스트 할 수 있습니까?

@Value("${services.host}${services.name}") 
private String hostname; 

그래서 모든 속성은 런타임에 해결할 수 있는지 확인 : 나는 주입 내 코드에서 이 같은 특성이있다. 내 응용 프로그램 시작 시뮬레이션과 같은 것.

가능합니까?

+0

'spring-boot-starter-test'를 확인 했습니까? – sfat

+0

하지만 왜 당신은 unittest 봄 프레임 워크 instied 귀하의 bussiness 논리의 내게 신비입니다 – Antoniossss

답변

1

예, 프로덕션 코드와 마찬가지로 응용 프로그램 컨텍스트를로드 한 JUnit 테스트 클래스를 만든 다음 속성 값이 주입되었는지 테스트하는 테스트 메서드를 실행할 수 있습니다. 이 예 MyServiceBean.java에서

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {AppConfig.class}) 
public class SpringApplicationTest { 
    @Autowired 
    private MyServiceBean serviceBean; 

    @Test 
    public void shouldExecuteServiceBean_andProduceExpectedOutcome() { 
     //TODO test setup 

     serviceBean.doSomething() 

     //TODO assert output 
    } 
} 

는 스프링 의존성 주입을 모두 포함하여 응용 프로그램의 엔드 - 투 - 엔드 로직을 테스트 할 수 있도록, 당신의 Main 클래스에서 실행됩니다 클래스입니다. 이를 "행복한 경로"테스트 시나리오라고 생각하십시오. 저는 모든 프로젝트에서 스프링 인젝션이 정확하고 오류없이로드되도록 프로젝트에 항상 최소한 하나의 테스트를 포함합니다. 코드를 작성하고 배포하기 전에 오류를 잡을 필요가 없습니다.

위 예제에서 AppConfig.java은 코드가 배포 될 때 사용하는 것과 동일한 스프링 구성 클래스입니다. 테스트 용으로 특별히 일부 등록 정보/bean을 겹쳐 쓰는 다른 구성 클래스를 추가하려고합니다. 당신이 아니라 다른 서비스보다 (즉,이 in-memory database 사용) 어려운 테스트 할 종속성을 조롱하고, 당신이 "로컬 호스트"에 대해 테스트 할 수 있도록 또한 속성을 재정의 할 수 있습니다 테스트를 전용 클래스를 사용

@ContextConfiguration(classes = {AppConfig.class, TestConfig.class}) 

하는 수도 있고 수도 사용할 수 없으므로 (테스트 설정에서 동등한 localhost 서비스를 만들 수있는 한).

참고 : 너무 많은 종속성 또는 외부 종속성을 쉽게 바꿀 수 없기 때문에 응용 프로그램을 테스트하기가 어려울 경우 느끼는 고통은 응용 프로그램을 변경하는 방법에 대한 생각을 시작하기에 좋은 안내서입니다. 테스트 용이성을 지원하는 아키텍처. 위의 개념을 사용하여 응용 프로그램의 일부만 테스트 할 수도 있습니다.