2017-09-29 2 views
0

간단한 봄 예제에 junit 테스트를 추가했지만 필자가 작성한 json 서비스를 autowire하지 못한다.Spring Junit과 annotation 기반 autowiring

봄에 자동 와이어 링이 작동하도록하려면 JUnit 테스트가 필요합니다.

미리 ... 어떻게 밖으로

git clone https://bitbucket.org/oakstair/spring-boot-cucumber-example 
cd spring-boot-cucumber-example 
./gradlew test 

감사 실패한 프로젝트를 시도하십시오!

응용 프로그램

@SpringBootApplication 
@ComponentScan("demo") 
public class DemoApplication extends SpringBootServletInitializer { 

서비스 인터페이스

@Service 
public interface JsonUtils { 

    <T> T fromJson(String json, Class<T> clazz); 

    String toJson(Object object); 

} 

서비스 구현

@Component 
public class JsonUtilsJacksonImpl implements JsonUtils { 

테스트

@ContextConfiguration() 
    @RunWith(SpringJUnit4ClassRunner.class) 
    @ComponentScan("demo") 
    public class JsonUtilsTest { 

     @Autowired 
     private JsonUtils jsn; 
+1

과 같아야 테스트 클래스 에

을 @SpringBootTest 추가하고 SpringBootApplication 클래스와 @SpringBootTest

의 클래스 필드에 JSON 유틸 클래스를 제공 문제의 코드를이 질문에 추가하십시오. –

+0

글쎄, 복제로 10 초 안에 얻을 수 있습니다! 그다지 많지는 않지만 여기에 붙여 넣을 것은 많습니다 ... –

+1

@GunnarEketrapp 아무도 프로젝트를 복제 할 시간이 없습니다 .... – Antoniossss

답변

1

@Configuration 클래스가 아니므로 JsonUtilsTest에서 @ComponentScan을 클래스 수준에 배치 할 수 없습니다. 당신이 여기에서 사용하는 같은 @ContextConfiguration 주석이 먼저 정적 내부 @Configuration 클래스를 찾고 함께 그래서 @ComponentScan있는 사람 중 하나를 추가하고 작동합니다 :

@ContextConfiguration() 
@RunWith(SpringJUnit4ClassRunner.class) 
public class JsonUtilsTest { 

    @Autowired 
    private JsonUtils jsn; 


    @Test 
    // Note: This test is not tested since I haven't got autowiring to work. 
    public void fromJson() throws Exception { 
     Integer i = jsn.fromJson("12", Integer.class); 
     assertEquals(12, (int) i); 
    } 

    @Test 
    // Note: This test is not tested since I haven't got autowiring to work. 
    public void toJson() throws Exception { 
     assertEquals("12", jsn.toJson(new Integer(12))); 
    } 

    @Configuration 
    @ComponentScan("demo") 
    public static class TestConfiguration { 
    } 

} 

편집 : 또는 당신은 봄 부팅을 할 수 있습니다 대신 SpringRunner를 사용하여 @SpringBootTest 주석을 사용하여 작업하십시오 :

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class JsonUtilsTest { 
0

테스트 클래스에 추가하면 내 문제가 해결되었습니다!

@ContextConfiguration(classes = {DemoApplication.class}) 
+0

테스트에서 ComponentScan 제거 ... –

0

그것은이

@ContextConfiguration() 
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes={<package>.DemoApplication.class, <package>.JsonUtil.class }) 
@ComponentScan("demo") 
public class JsonUtilsTest {