À l'aide de Mockito annotations avec le printemps
Je suis à l'aide de printemps dans mon application et je veux écrire des tests unitaires pour toutes mes classes. J'appelle quelques-uns des services web externes à partir de mon application et je veux se moquer d'eux à l'aide de Mockito depuis je veux juste tester mon fonctionnalités.
Permet de dire que j'ai le scénario suivant
C'est mon webservice interface
public interface MyWebService {
public String getSomeData(int id);
}
- Je utiliser le service ci-dessus, de cette façon
public interface MyService {
int doSomethingElse(String str);
}
public class MyServiceImpl implements MyService {
private MyWebService myWebService;
int doSomethingElse(String str) {
.....
myWebService.getSomeData(id);
...
}
}
public interface MyService1 {
Stirng methodToBeTested();
}
public class Class1 implements MyService1{
@Resource
private MyService myService;
public Stirng methodToBeTested() {
myService.doSomethingElse("..");
}
}
J'ai écrit le uint cas de test comme ci-dessous. Je suis d'espionnage MyService, afin d'exécuter le test de l'unité.
public class class1Test {
@Spy
MyService myService;
@Resource
@InjectMocks
Class1 class1;
public void setUPTest() {
MockitoAnnotations.initMocks(this);
Mockito.doReturn(123).when(myService).doSomethingElse("someString");
}
@Test
public void methodToBeTestedTest() {
this.setUPTest();
...
class1.methodToBeTested();
}
}
Quand je lance le test, ce que je vois, c'est que, j'obtiens la valeur de la webservice place de ce que je mentionne tout en écrasant.
Quelqu'un peut-il m'aider?
OriginalL'auteur rahul | 2013-03-26
Vous devez vous connecter pour publier un commentaire.
J'ai résolu ce problème en utilisant spring java config. J'ai étendu mon fichier de config par défaut dans mon test du fichier de config.
Maintenant, ma classe de test qui va comme ceci
OriginalL'auteur rahul
Un
@Spy
est utilisé pour espionner ce qui se passe lors de l'appel de services (et utile pour, par exemple. affirmer la présence ou l'absence de transitives des invocations de méthode), ce que vous voulez, c'est le@Mock
annotation:Ainsi, dans tout le
myService
méthodes de retourner null, barre de ceux que vous surcharger avecdoReturn
/when
.D'ailleurs, plutôt que d'appeler
setUpTest()
de vos méthodes de test, vous devez annoter avec@Before
.Acclamations,
OriginalL'auteur Anders R. Bystrup
Pour remplacer votre Bean avec fantaisie dans certains test de l'utilisation Springockito ou mieux Springockito-annotations.
Quelque chose comme cela devrait fonctionner:
}
mis à jour. Si dans votre contexte réel myService est injecté à Class1 - il sera injecté avec WrapWithSpy trop.
Je suis à l'aide de spring java config pour l'initialisation de haricots, springockito dosent la soutenir.
semble fonctionner avec SpringockitoAnnotatedContextLoader.class
Merci! Qui a résolu mon problème. Mais j'ai utilisé "ReplaceWithMock" avec "Autocâblés" annotations combinaison espionner un véritable printemps de haricot.
OriginalL'auteur Michail Nikolaev
Voulez-vous dire anyString() plutôt que de "someString" dans votre
setUp
méthode? Cela peut aussi êtreeq("someString")
si vous appelez votre méthode avec une chaîne de caractères.À partir de ma compréhension de Mockito je n'utilise pas fait car ils ont probablement indiquer une classe de problèmes de conception. Pourquoi ne pas vous
@Mock
l'ensemble deMyService
, donc;@Spy
. Tous les appels à la ws peut alors être simplement moqué avec l'option de non-espionnage de l'outillage.Qui permettrait de résoudre le problème, mais le plus triste, c'est que je ne peux pas changer l'origine de la mise en œuvre de MyService ou MyServiceImpl.
Ah oui, vous avez raison d'utiliser un espion alors. Je n'avais pas conscience. Ils sont particulièrement utiles lorsqu'il s'agit de la 3e partie/legacy code. Mon avis sur le Rapprochement de rendement de mieux se moquant de résultats?
Pas de. Le seul problème, je suis confronté à est ici avec "@Resource" et "@InjectMocks" utilisé sur le même variable. La variable est initialisée d'abord avec "@Ressource", alors l'injection dosent arriver.
OriginalL'auteur OceanLife
Modifié,
OriginalL'auteur Sajan Chandran
Cela devrait convient à votre besoin:
Voir aussi la officiel doc.
OriginalL'auteur