2016-07-07 1 views
-1

내 소스 폴더에 콩으로 노출 된 유틸리티 클래스가 있습니다. junit 4로 작성된 테스트 클래스에서 이러한 유틸리티 중 일부를 사용하려고합니다. 예를 들어 객체를 JSON 문자열로 마샬링하는 메소드가있는 유틸리티 클래스가 있습니다. 내 테스트 클래스에이 유틸리티 빈을 삽입하고 싶다. Autowired 어노테이션을 사용하여이 빈을 주입 할 수 없습니다. 이 모든 클래스를 테스트 폴더로 복사해야합니까?봄 테스트 폴더에 src 폴더에서 콩을 주입

편집 :

jsonUtil을 주입하려고합니다. 아래는 내 코드가 어떻게 보이는지입니다.

import static org.junit.Assert.*; 

import java.math.BigDecimal; 

@RunWith(MockitoJUnitRunner.class) 
@SpringApplicationConfiguration(classes = ProxyApplicationMock.class) 
public class ProxyApplicationMock { 

    @Mock 
    public SoapClient soapClientMock; 

    private JsonUtil jsonUtil; 

메인 클래스

public class ProxyApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(ProxyApplication.class, args); 
    } 
} 
+0

당신은 Spring 컨텍스트 구성으로 테스트 클래스 코드의 예를 보여 우리에게 이야기해야하는 사용중인 Spring 버전. – Matt

+0

안녕 Matt, 코드를 추가하고 Spring Boot를 사용 중입니다. –

+0

자, 제 대답을보고 도움이되는지 알려주세요. Spring 설정 파일을 보여 주면 도움이 될 것입니다 :'ProxyApplicationMock' – Matt

답변

1

메인 클래스는 다른 방법으로 주위를 테스트 클래스를 볼 수 있지만 될 수있다. 따라서 복사 할 필요가 없습니다.

유틸리티 클래스가 테스트 Spring 컨텍스트 구성 (클래스 또는 XML 파일 - @ContextConfiguration에 선언 됨)에서 스프링 관리 Bean으로 선언 된 경우 기본 구성과 다를 수 있으며 아마 다를 수 있습니다.

그런 다음 SpringJUnit4ClassRunner을 사용하는 경우 테스트 클래스가 포함 된 모든 Spring 관리 클래스에 삽입 할 수 있습니다.

편집 :

, 주요 문제는 테스트 러너는 SpringRunner (SpringJUnit4ClassRunner에 대한 별칭)이 아니며, 따라서 JUnit을이 봄 맥락에서 테스트를 실행하지 않는 것이 무엇인지 우리는 코멘트에서 논의 요약하면 . a test example here을 살펴보십시오.

가장 간단한 테스트 케이스는 다음과 같습니다.

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class CityRepositoryIntegrationTests { 
    @Autowired 
    private MySpringBean springBean; 
    //... 
} 

하지만 봄 부팅으로 자주 발생하는 마술이 있습니다. @SpringBootTest@SpringBootConfiguration으로 주석 된 클래스를 자동으로 감지하는 편리한 주석입니다. 즉, 테스트를위한 특정 Spring 구성이 없으면 기본 Spring 구성을 사용하므로 기본 응용 프로그램의 모든 bean을 포함하고 인스턴스화합니다 , 그리고 그것은 대개 우리가 의존성을 조롱함으로써 클래스를 독립적으로 테스트하기를 원하기 때문에 우리가 단위 테스트에서 원하는 것이 아닙니다. 당신이 할 수있는 일

는, 같은, 당신은 당신의 검사 결과에 포함 할 봄 compenent 클래스를 제공 할 수 있습니다 :

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = MySpringBean.class) 
public class CityRepositoryIntegrationTests { 
    @Autowired 
    private MySpringBean springBean; 

    @Mock 
    private MyMockedSpringBeanDependency mocked; 
    //... 
} 
+0

감사합니다. Matt. 나는 Jackson을 사용하고 있지만, 내 util의 마샬링 및 언 마샬링 섹션에 대한 많은 사용자 정의를 수행했다. –