2009-06-17 16 views
2

私は、単純にライブラリクラスを拡張し、その親のメソッドをデフォルトのパラメータで呼び出すJavaクラスを持っています。どうすればJunitテストを書くことができますか? MockObjectTestCaseも良いです。ここで私が話しているかの例です:ラッパークラスのJunitテストケース

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()); 
    } 
} 

私はラッパー・メソッドが必要さえありませんが、それを頻繁に呼び出しが容易になります知っています。クラスは正常に動作することに注意してください。単体テストの記述方法にのみ興味があります。

答えて

2

この特定の例では、私はprobalbyがそれをテストするのは気にしません。最初の2行は記述しにくい場合は、それはそれをテストするためではない、より理にかなって、

@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)); 
} 

:あなたはそれをテストする必要がある場合

、のようなものを試してみてください。 このようなテストがいくつかある場合は、最初の2行をセットアップフィクスチャに移動します。

0

私は単体テストを書く価値があるとは思いません。すでにResourceBundleMessageSource.getMessage()のテストがある場合は、それで十分です。

3

クラスを少しリファクタリングする場合は、ResourceBundleMessageSourceを拡張するのではなく、MessageSourceインスタンスにMessageResource代理人をお勧めします。それから私はユニットテストでモックを使用します。このような何か:

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 

} 

とユニットテスト

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); 
    } 

} 
関連する問題