2017-07-15 3 views
0

J'ai un morceau de code qui sera répété à travers plusieurs tests d'intégration. Le code sera exécuté avant et après les tests.Règle de junit Autowire dans le test d'intégration

J'ai décidé que l'utilisation d'une JUnit @Rule serait le meilleur moyen d'y parvenir.

Le problème est que la règle devra avoir accès à quelques haricots de printemps @Autowired. (Les tests sont effectués avec Runner test Spring Integration si autowire fonctionne très bien

J'ai une règle.

public class CustomSpringRule extends ExternalResource { 
    private final SomeOtherBean; 

    public CustomSpringRule(SomeOtherBean someOtherBean) { 
     this.someOtherBean = someOtherBean; 
    } 

    @Override 
    public void before() { 
     someOtherBean.someMethod(); 
    } 
    (...) 
} 

J'ai mon contexte auquel j'ai ajouté mon grain:

@Bean 
public CustomSpringRule getCustomSpringRule(SomeOtherBean someOtherBean) { 
    return new CustomSpringRule(someOtherBean) 
} 

Enfin, je viens autowired la fève de règle dans le fichier de test:

@Autowire 
@Rule 
public CustomSpringRule customSpringRule 

tout fonctionne très bien, mais je ne nous a jamais vraiment ed @Rule annotation et je suis un peu inquiet que JUnit réflexion et Spring Autowire ne vont pas bien ensemble ou il y aura quelques problèmes qui ne sont pas évidents au premier coup d'oeil.

Quelqu'un at-il des suggestions si c'est valide et sûr?

+0

Il semble que l'odeur d'un code fasse que les tests doivent être exécutés dans un certain ordre. Les tests devraient être indépendants les uns des autres –

Répondre

0

Je ne pense pas que vous ayez besoin de @Rule ici, "J'ai un morceau de code qui sera répété à travers plusieurs tests d'intégration Le code sera exécuté avant et après les tests." Cela peut être réalisé en utilisant @Before et @After annotations JUnit. Les méthodes annotées avec ces annotations s'exécuteront avant/après chaque test. Vous pouvez donc appeler votre code commun à partir de ces méthodes.

+0

Oui, je pourrais bien que je voulais éviter la répétition du code et avoir une règle ordonnée. D'un autre côté, je ne suis pas sûr si je devrais utiliser des haricots de printemps pour faire une logique de testign. – Taks

+0

Eh bien, je veux dire garder votre code commun ailleurs que le test afin que vous puissiez l'utiliser à partir de tous les tests. Seul l'appel sera répété, quelque chose comme vous l'avez mentionné plus haut "someOtherBean.someMethod();" – ravinikam