2009-06-17 7 views
2

J'ai une classe Java qui étend simplement une classe de bibliothèque et appelle une méthode de son parent avec un paramètre par défaut. Comment écrire un test Junit pour cela? Un MockObjectTestCase est bon aussi. Voici un exemple de ce dont je parle:Cas de test Junit pour la classe wrapper

public class ResourceBundleMessageSource { 
    public String getMessage(String key, Object[] objects, Locale locale) { 
     //Spring library method 
    } 
} 

public class MessageResource extends ResourceBundleMessageSource { 
    public String getMessage(String key) { 
     return (getMessage(key, null, Locale.getDefault()); 
    } 
} 

Je sais la méthode d'emballage est même pas nécessaire, mais fait des appels fréquents à faciliter la tâche. Notez que la classe fonctionne bien, je ne suis intéressé que par la façon dont le test unitaire est écrit.

Répondre

2

Pour cet exemple particulier, je ne tenterais probablement pas de le tester.

Si vous avez besoin de le tester, essayer quelque chose comme:

@Test 
public void getDefaultMessage() { 
    ResourceBundleMessageSource origSource = <create source> 
    MessageResource subSource = <create with same criteria as origSource> 
    String key = <some key that is locale-specific> 
    assertEquals(origSource.getMessage(key, null, Locale.getDefault()), 
       subSource.getMessage(key)); 
} 

Si les deux premières lignes sont difficiles à écrire, alors il est logique encore plus de ne pas le tester. Si vous avez plusieurs tests comme celui-ci, déplacez les deux premières lignes dans un montage d'installation.

0

Je ne pense pas qu'il soit même utile d'écrire un test unitaire pour cela. S'il existe déjà un test pour ResourceBundleMessageSource.getMessage(), cela devrait suffire.

3

Si vous souhaitez modifier légèrement votre classe, je recommanderais MessageResource délégué à une instance MessageSource, plutôt que d'étendre ResourceBundleMessageSource. Ensuite, j'utiliserais des simulacres dans mon test unitaire. Quelque chose comme ceci:

public class MessageResource implements MessageSource { 

    private final MessageSource delegate; 

    public MessageResource(MessageSource delegate) { 
    this.delegate = delegate; 
    } 

    public String getMessage(String key) { 
    return delegate.getMessage(key, null, Locale.getDefault()); 
    } 

    // need to implement three other MessageSource methods, 
    // simple pass-throughs to delegate 

} 

et unité d'essai

public class MessageResourceTest { 

    private MessageSource mockDelegate; 
    private MessageResource messageResource; 

    @Before 
    public void setUp() throws Exception { 
    mockDelegate = //mock with your favorite framework, or by hand 
    messageResource = new MessageResource(mockDelegate); 
    } 

    @Test 
    public void testGetMessage() { 
    String key = "foo"; 

    String actualMessage = messageResource.getMessage(key); 

    assertEquals(key, /* get key passed to mock delegate */); 
    assertSame(Locale.getDefault(), /* get Locale passed to mock delegate */); 
    assertEquals(/*expected message from mock*/, actualMessage); 
    } 

} 
Questions connexes