Fermer

septembre 22, 2021

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.

Considérez une classe Cls avec une méthode method() qui repose sur une méthode helperMethod()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;
    @Before
    
 ]   [19659029 void setUp() lance Exception
   {
         
 */

        helperI = createNiceMock(HelperI.class);
 71]       cl new Cls();
        cls.setHelperI(helperI);
   }]
  @Test
 
    
    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)); 
   }
}

Ce tutoriel a été utilisé comme source pour cet article.

À propos de l'auteur

Ross Grogan-Kaylor est consultant technique associé au bureau de Perficient à Minneapolis. Il aime s'intéresser aux modèles structurels de la syntaxe et aux idées de haut niveau du développement logiciel.

Plus de cet auteur






Source link