2009-06-17 3 views
2

У меня есть класс Java, который просто расширяет класс библиотеки и вызывает метод его родителя с параметром по умолчанию. Как мне написать тест Junit? MockObjectTestCase тоже хорош. Вот пример того, что я говорю о:Junit test case для класса оболочки

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

Для этого конкретного примера я бы не стал его тестировать.

Если вам не нужно, чтобы проверить это, попробуйте что-то вроде:

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

Если первые две строки трудно писать, то это делает даже больше смысла, чтобы не испытать его. Если у вас есть несколько таких тестов, переместите первые две строки в установочный прибор.

0

Я не думаю, что даже стоит написать единичный тест для этого. Если уже есть тест ResourceBundleMessageSource.getMessage(), то это должно быть достаточно хорошим.

3

Если вы захотите реорганизовать свой класс немного, я бы порекомендовал делегату MessageResource экземпляру MessageSource, а не расширению ResourceBundleMessageSource. Затем я использую mocks в своем модульном тесте. Что-то вроде этого:

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

}