2009-07-31 6 views
0

Je suis nouveau pour tester dans Grails, donc je ne suis pas sûr si je prends la bonne approche. J'essaie de tester un service unit (appelez-le FooService) qui a une instance d'une autre classe (appelez-le Bar) comme une propriété. Fondamentalement, quelque chose comme:Les constructeurs se moquent de Grails

class FooService { 
Bar bar 

void afterPropertiesSet() { 
    bar = new Bar() 
} 
} 

Donc, je suis en train de tester la méthode afterPropertiesSet, et si je comprends bien, la pratique correcte pour les tests unitaires est de se moquer en dehors des cours. Alors, comment, dans FooServiceTests étend GrailsUnitTestCase, est-ce que je moque le constructeur Bar?

Merci

Répondre

0

Vous n'en avez pas.

EasyMock dépend de proxies, et cela signifie une interface. À moins que Bar ne puisse être une interface, ce n'est pas un candidat pour le mandataire.

Vous vous moquez de quelque chose comme un DAO ou une autre dépendance externe que vous avez déjà testée à l'unité pour empêcher votre FooServiceTest de devenir un test d'intégration, mais Bar? "... la bonne pratique pour les tests unitaires est de se moquer des classes externes ..." - Je crois que c'est incorrect. Se moquer de chaque objet prend l'idée trop loin.

+0

Merci. J'ai eu le sentiment que je pourrais prendre le paradigme trop loin :-) –

0

Si vous avez besoin ou souhaitez simuler le constructeur Bar, vous pouvez.

En utilisant JMockit, vous pouvez écrire (en Java ci-dessous, voir here de l'utiliser avec Groovy):


import org.junit.*; 
import org.junit.runner.*; 

import mockit.*; 
import mockit.integration.junit4.*; 

@RunWith(JMockit.class) 
public class FooServiceTest 
{ 
    @Test 
    public void afterPropertiesSet() 
    { 
     new Expectations() 
     { 
      Bar mockBar; 

      { 
       new Bar(); // records expectation for the Bar constructor 
      } 
     }; 

     // Will call a mocked "Bar()": 
     new FooService().afterPropertiesSet(); 
    } 
} 
1

Répondre trop tard, mais si quelqu'un veut à l'avenir.

  def barObj 
      def barCtrl= mockFor(Bar) 
      Bar.metaClass.constructor = { -> 
       barObj=[:] 
       return barObj 
      } 

when: 
     service.afterPropertiesSet() 

     then: 
     assert barObj == //check the properties 
Questions connexes