Se moquer du développement piloté par les tests (TDD) avec EasyMock de Java

Dans cet article, nous allons explorer la pratique de développement piloté par les tests de mocking. Non, cela n'impliquera pas d'appeler vos coéquipiers développeurs des noms stupides ! Plus précisément, nous utiliserons le package Java EasyMock pour avoir une idée des fonctionnalités fournies par une bibliothèque de moquerie typique.
Avant d'apprendre ce qu'est la moquerie, nous devons d'abord considérer le scénario général dans lequel la moquerie est utile.
Cls
avec une méthode method()
qui repose sur une méthode helperMethod()
où helperMethod()
interroge une ressource externe .
public class Cls
{
private Object helperMethod(Object args)
{[19659020]
return result;
}
public Object method(Object args) [19659020]{
return result ;
}
}
Supposons que notre objectif est de tester si la méthode()
fonctionne. Puisque method()
appelle helperMethod()
une méthode qui repose sur une ressource externe imprévisible, nous devrons imiter ou mock helperMethod()
afin d'atteindre notre objectif. C'est-à-dire qu'au lieu d'appeler réellement helperMethod()
dans method()
nous ferons une supposition éclairée quant à ce que la sortie de helperMethod()
devrait être pour diverses entrées.
Afin de simuler helperMethod()
de cette manièrenous remplacerons l'appel à helperMethod()
par un appel à une méthode d'interface.
public interface HelperI { Object helperMethod(Object args); }
public classe Cls
{
privé HelperI helperI;
public void[19659018]setHelperI(HelperI helperI) { this.helperI = helperI; }
public Object method(Object args)
{
retour ;
}
}
Nous avons remplacé l'appel à helperMethod()
par un appel à helperI.helperMethod()
.
Donné la configuration ci-dessus, nous pouvons maintenant utiliser EasyMock
pour fournir une implémentation de helperI.helperMethod()
puis utiliser JUnit
pour tester method( )
. Nous supposons que les instructions nécessaires static import
pour JUnit et EasyMock sont utilisées.
Voici cette implémentation :
public class Tester
{
privé HelperI helperI;
private Cls cls;
] [19659029 void setUp() lance Exception
{
*/
helperI = createNiceMock(HelperI.class);
71] cl new Cls();
cls.setHelperI(helperI);
}]
public void testMethod()
{
/* Maintenant, "bloquer" helperMethod(). L'appel expect() ci-dessous spécifie que,
pour i dans {1, ..., n}, la ième fois helperI.helperMethod() est appelée,
il aurait dû recevoir les arguments d'entrée [i] (dans cet exemple, l'entrée sera
provenir de method(), puisque method() appelle helperI.helperMethod()),
et qu'il renverra des retours[i]. */
n = ...
Object[] args = ...
90
Object[] helperReturns = ...
[19640][196590] [19594590]Retour ]
for (i = 018]i[19659090i ++)
expect(helperI.helperMethod(args[[194590])).etReturn(helperReturns[i]);
[1945ay(helperI);
cls.setHelperI(helperI );
[196590
for (i = 0; i n; i ++)
Object args = ...
[ [ 196590] asser 29 19459008](expectedMethodReturns[i]cls.method(args));
}
}
Source link