N'Printemps @DirtiesContext recharger Printemps contexte?
J'ai une classe de test qui ressemble à
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public abstract class TestClass {
@Rule @Resource public JUnitRuleMockery jMockContext;
public void test1() {
//Expectations and test
}
public void test2() {
//Expectations and test
}
}
et dans test-context.xml
- je définir le JUnitRuleMockery
, en plus de plusieurs objets fantaisie grâce à un factory-method
, comme
<bean id="mockContextFactory" class="MockContextFactory" />
<bean id="jMockContext" factory-bean="mockContextFactory" factory-method="getContext" scope="prototype" />
<bean id="firstMock" factory-bean="mockContextFactory" factory-method="getFirstMock" />
<bean id="secondMock" factory-bean="mockContextFactory" factory-method="getSecondMock" />
MockContextFactory
est
public class MockContextFactory
{
private JUnitRuleMockery jUnitRuleMockery;
public MockContextFactory() {
jUnitRuleMockery = new JUnitRuleMockery();
jUnitRuleMockery.setThreadingPolicy(new Synchroniser());
}
public JUnitRuleMockery getContext() {
return jUnitRuleMockery;
}
public FirstMock getFirstMock() {
return jUnitRuleMockery.mock(FirstMock.class);
}
//others getter
}
Dans TestClass
j'ai plusieurs méthodes d'essai et, en raison des annotations @DirtiesContext
, j'attends le Printemps contexte pour être rechargé après chaque exécution du test (puisque chaque test établit les attentes sur les objets fantaisie, je dois recharger Printemps contexte à chaque fois). Voir @DirtiesContext à partir d'ici. Cependant, il semble que le Printemps contexte n'est pas rechargé: en fait, en entrant dans le mode de débogage au début de test2
(soi-disant test1
a été exécuté plus tôt), je peux voir jMockContext
tenant toujours les attentes, la liste d'exécution et les erreurs (le cas échéant) de test1
.
Donc, pour finir avec quelques questions, est-ce @DirtiesContext
vraiment causer Printemps contexte pour être rechargé (comme je l'ai compris dès le Printemps Docs) ou ai-je mal compris le annotation? Dans le premier cas, ce que je fais mal? Dans ce dernier cas, comment puis-je forcer le Printemps contexte pour être rechargé pour chaque test?
MODIFIER, de délimiter le problème: j'ai eu un code comme l'exemple ci-dessus, l'exécution de quelques jours, alors aujourd'hui j'ai créé un nouveau test dans lequel j'ai ajouté une attente qui a échoué. Ensuite, j'ai vu tous les autres tests dans la classe de défaut pour la même raison (alors qu'ils où green
jusqu'à aujourd'hui). Le débogage, j'ai découvert que jMockContext
n'a jamais été effacé, ce qui signifie que tous les tests ont été l'ajout d'attentes pour le même pool: bien sûr, tant qu'aucun échec de l'attente, qui a été transparent et je n'ai pas remarqué (test1
ajoute et passe peu d'attentes, test2
prend un non-vide de piscine de attentes DÉJÀ passé et ajoute sa propre donc il n'y a pas de problème), mais je n'aime pas la situation précédente, et je voudrais commencer chaque test sans précédent de définir les attentes à tous.
OriginalL'auteur ThanksForAllTheFish | 2014-01-20
Vous devez vous connecter pour publier un commentaire.
Voici ma solution. Je ne sais pas si c'est limité au Printemps 3.2 ou si c'est un malentendu général, mais simplement à l'aide de
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
n'est pas suffisant pour causer de tout le Printemps contexte pour être rechargé pour chaque test. J'ai eu aussi ajouter l'DirtiesContextTestExecutionListener
dans@TestExecutionListeners
.Donc, à la fin, ce qui a fonctionné pour moi, c'était seulement pour modifier l'annotation de mon
TestClass
àRien d'autre a changer.
@DirtiesContext @TestExecutionListeners(value = {MyListener.class, OtherListener.class}, mergeMode = MergeMode.MERGE_WITH_DEFAULTS)
va faire ça bien.En glissement annuel ont sauvé ma journée!
OriginalL'auteur ThanksForAllTheFish