2017-09-29 3 views
0

J'ai ajouté un test de junit à un simple exemple de ressort, mais il ne parvient pas à autowire le service json que j'ai écrit.Spring Junit et annotation autowiring

De quoi a-t-on besoin pour que l'autowiring fonctionne dans un test JUnit de printemps?

Pour essayer le projet ne ... à faire

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

Merci à l'avance!

application

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

Interface de service

@Service 
public interface JsonUtils { 

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

    String toJson(Object object); 

} 

mise en œuvre du service

@Component 
public class JsonUtilsJacksonImpl implements JsonUtils { 

test

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

     @Autowired 
     private JsonUtils jsn; 
+1

s'il vous plaît ajouter le code en question dans cette question –

+0

Eh bien, vous pouvez le faire en 10 secondes par clonage! Ce n'est pas beaucoup mais beaucoup à coller ici ... –

+1

@GunnarEketrapp personne ne prend le temps de cloner vos projets .... – Antoniossss

Répondre

1

Dans votre JsonUtilsTest, vous ne pouvez pas mettre un @ComponentScan au niveau de la classe, car il ne s'agit pas d'une classe @Configuration. Avec une annotation @ContextConfiguration comme vous utilisez ici, il est tout d'abord à la recherche d'une classe @Configuration intérieure statique pour ajouter un de ceux qui ont le @ComponentScan et il devrait fonctionner:

@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 { 
    } 

} 

EDIT: Ou vous pouvez faire démarrer Spring faire le travail pour vous en utilisant l'annotation @SpringBootTest avec un SpringRunner à la place:

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

l'ajout de ce à la classe de test fixe mes problèmes!

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

Plus de supprimer le ComponentScan dans le test ... –

0

Ajouter @SpringBootTest

Sur votre classe de test et fournir votre classe SpringBootApplication et la classe de JSON dans le domaine des classes de @SpringBootTest

Il devrait ressembler à ceci

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