EasyMock : java.lang.IllegalStateException: 1 de rapprochement prévu, 2 enregistré
J'ai un problème avec EasyMock 2.5.2 et JUnit 4.8.2 (en cours d'exécution par le biais de l'Éclipse). J'ai lu les messages ici mais n'ont pas trouvé de réponse. J'ai une classe contenant deux tests qui test la même méthode. Je suis à l'aide de rapprochement.
- Chaque test passe lorsque vous exécutez seul.
- Le test de la première passe toujours - cela est vrai, si je change l'ordre des tests dans le fichier.
Ici est une version simplifiée du code de test:
private Xthing mockXthing;
private MainThing mainThing;
@Before
public void setUp() {
mockXthing = EasyMock.createMock(Xthing.class);
mainThing = new MainThing();
mainThing.setxThing(mockXthing);
}
@After
public void cleanUp() {
EasyMock.reset(mockXthing);
}
@Test
public void testTwo() {
String abc = "abc";
EasyMock.expect(mockXthing.doXthing((String) EasyMock.anyObject())).andReturn(abc);
EasyMock.replay(mockXthing);
String testResult = mainThing.testCallingXthing((Long) EasyMock.anyObject());
assertEquals("abc", testResult);
EasyMock.verify(mockXthing);
}
@Test
public void testOne() {
String xyz = "xyz";
EasyMock.expect(mockXthing.doXthing((String) EasyMock.anyObject())).andReturn(xyz);
EasyMock.replay(mockXthing);
String testResult = mainThing.testCallingXthing((Long) EasyMock.anyObject());
assertEquals("xyz", testResult);
EasyMock.verify(mockXthing);
}
La deuxième (ou la dernière) test échoue toujours avec l'erreur suivante:
java.lang.IllegalStateException: 1 matchers expected, 2 recorded
Toute la perspicacité de ce serait grandement apprécié.
Grâce,
Anne
La ligne lance de cette exception?
Désolé - dans la deuxième (ou la dernière) test -EasyMock.attendre(mockXthing.doXthing((String) EasyMock.anyObject())).andReturn(xyz);
OK ouais je pense que c'est ce que ma réponse dit alors.
Désolé - dans la deuxième (ou la dernière) test -EasyMock.attendre(mockXthing.doXthing((String) EasyMock.anyObject())).andReturn(xyz);
OK ouais je pense que c'est ce que ma réponse dit alors.
OriginalL'auteur Anne | 2011-07-01
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas regardé minutieusement étroitement encore, mais ça a l'air suspect:
anyObject()
est un comparateur et vous appelez cela après la relecture. Il n'est pas utilisé pour produire n'importe quel objet. Il est utilisé pour charger des EasyMock à permettre n'importe quel objet. EasyMock est de détecter les extra matcher mais il n'est pas nocif jusqu'à ce que le deuxième test. À ce moment, le nombre de rapprochement que EasyMock a enregistré mais ne l'a pas encore utilisé (2) ne sont pas alignées avec le nombre de paramètres attendus pour la deuxièmedoXthing
appel (1).Vous devriez être en train de passer dans réel paramètres de
testCallingXthing
(ou une maquette qui est en mode de lecture). Essayer de passer ennull
directement, ou une valeur réelle comme2
.OriginalL'auteur Mark Peters
pour moi cet échec (dans mon cas 2 de rapprochement prévu, 4 enregistré). signifiait: "vous êtes le mélange easymock et mockito dans la même unité de test, de sorte accidentellement appel easymock de notNull() méthode pour un mockito argument. Ce qui provoque l'échec, mais seulement si les tests sont exécutés dans un certain ordre.
Pour moi j'ai utilisé un Easymock matcher au lieu d'un Hamcrest macther dans une assertion. Même si j'ai dû réinitialiser et relus dans le bon ordre, c'était de les enregistrer et de provoquer le prochain test à l'échec. Cela m'a aidé à le trouver.
OriginalL'auteur rogerdpack
Essayer:
Il y a de plus raffiné de rapprochement que
anyObject()
. Ceux-ci vous permettent de faire en fonction de leur type d'assertions à propos de collaborateurs.De la EasyMock documentation:
OriginalL'auteur nsfyn55
Vous devez réinitialiser la maquette après chaque méthode de test pour se débarrasser de ce problème. L'ajout de code ci-dessous permettra de résoudre ce problème.
OriginalL'auteur user1371983