web-dev-qa-db-fra.com

Attentes EasyMock avec des méthodes nulles

J'utilise EasyMock pour faire des tests unitaires et je ne comprends pas l'utilisation de EasyMock.expectLastCall(). Comme vous pouvez le voir dans mon code ci-dessous, j'ai un objet avec une méthode qui retourne void en étant appelé dans la méthode d'un autre objet. Je penserais que je dois faire attendre EasyMock cet appel de méthode, mais j'ai essayé de commenter l'invocation expectLastCall() et cela fonctionne toujours. Est-ce parce que j'ai passé EasyMock.anyObject()) qu'il l'a enregistré en tant qu'appel attendu ou y a-t-il autre chose qui se passe?

MyObject obj = EasyMock.createMock(MyObject.class);
MySomething something = EasyMock.createMock(MySomething.class);
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something);

obj.methodThatReturnsVoid(EasyMock.<String>anyObject());

// whether I comment this out or not, it works
EasyMock.expectLastCall();

EasyMock.replay(obj);

// This method calls the obj.methodThatReturnsVoid()
someOtherObject.method(obj);

Le document API pour EasyMock dit ceci à propos de expectLastCall():

Returns the expectation setter for the last expected invocation in the current thread. This method is used for expected invocations on void methods.
20

Cette méthode vous renvoie le descripteur de l'attente via IExpectationSetters; ce qui vous donne la possibilité de valider (affirmer) que votre méthode void a été appelée ou non et les comportements associés, par exemple.

EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();

L'API détaillée des IExpectationSetters est ici .

Dans votre exemple, vous obtenez simplement le handle et ne faites rien avec lui donc vous ne voyez aucun impact d'avoir ou de supprimer l'instruction. C'est très comme vous appelez une méthode getter ou déclarez une variable et ne l'utilisez pas.

25
Yogendra Singh

Vous n'avez besoin de EasyMock.expectLastCall(); que lorsque vous avez besoin de vérifier plus loin que "Que la méthode a été appelée. (Identique à la définition de l'attente)"

Supposons que vous souhaitiez vérifier le nombre de fois que la méthode a été appelée afin d'ajouter l'un des éléments suivants:

EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();

Ou dites que vous voulez lever une exception

EasyMock.expectLastCall().andThrow()

Si vous ne vous en souciez pas alors EasyMock.expectLastCall(); n'est pas requis et ne fait aucune différence, votre instruction "obj.methodThatReturnsVoid(EasyMock.<String>anyObject());" est suffisante pour configurer l'attente.

2
Nisarg

Il vous manque EasyMock.verify (..)

MyObject obj = EasyMock.createMock(MyObject.class);
MySomething something = EasyMock.createMock(MySomething.class);
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something);

obj.methodThatReturnsVoid(EasyMock.<String>anyObject());

// whether I comment this out or not, it works
EasyMock.expectLastCall();

EasyMock.replay(obj);

// This method calls the obj.methodThatReturnsVoid()
someOtherObject.method(obj);

// verify that your method was called
EasyMock.verify(obj);
0
juandiegoh