Comment remplacer une méthode de tests unitaires qui est appelée à partir de laquelle la classe d'être testé
Je suis en train de tester un de catégorie A de la fonction func1.
Func1 a une variable locale de la Classe B et les appels B de la fonction func2. Le Code ressemble à ceci:
public Class A
{
public func1()
{
B object = new B();
int x = object.func2(something);
}
}
Quand je suis en train de tester func1 dans ses tests unitaires, je ne veux pas func2 à être appelé.
Donc je suis en train de faire quelque chose comme cela dans le test:
B textObject = new B()
{
@override
int func2(something)
{
return 5;
}
}
Mais il est toujours à l'appel de la func2 dans la classe B. Veuillez indiquer comment gérer cela.
- Pourriez-vous utiliser l'injection de dépendance, refactoring
A
de prendreB
comme un argument plutôt que de créer unenew
au sein de la fonction? Avec un tel résumé exemple, il est difficile de donner des conseils judicieux. - Je ne peux pas vraiment prendre B comme une entrée dans Un constructeur, ni dans le func1 comme une entrée parce que je suis primordial func1 dans la classe A. je peux faire B comme une variable de classe dans Un, mais cela ne semble pas aider non plus. Que suggéreriez-vous dans ce cas?
- Je ne suis pas sûr de ce que le problème est, de nouveau, l'exemple est trop abstrait. Faire de la recherche autour de DI.
- Résolu ce problème en utilisant l'injection de dépendance, merci pour l'aide.
- dans ce cas, vous pouvez écrire et d'accepter votre propre réponse, au lieu d'accepter celui qui n'est pas réellement comment vous avez résolu le problème!
- Ce que vous écrivez n'a pas de sens. Que signifie "je suis primordial func1 dans la classe A" à faire avec les arguments que vous fournissez dans le constructeur de cette classe. Le point est: si votre code repose sur les objets extérieurs, et que vous souhaitez modifier le comportement de ces objets externes, alors vous avez besoin d'un moyen pour "injecter" ces objets dans votre classe de test.
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez remplacer la
new B()
appel du constructeur - le place dans une méthode propre.Dans votre test, vous pouvez alors remplacer la
B
appel du constructeur.Ensuite utiliser
APartitialMock
pour tester lafunc1
avec votre genre deB
.PS Si vous pouvez ou si vous voulez utiliser un cadre de jeter un oeil à powermock - Maquette Constructeur
Si vous faites B comme une variable de classe, alors vous pouvez vous moquer de B, et "swap" dans l'objet testé de A.
Peut-être pas très élégant, mais simple et rapide.
Un exemple:
Et un test: