[英]Junit test case for wrapper class
我有一个 Java class,它只是扩展了一个库 class 并使用默认参数调用其父项的方法。 我如何为此编写 Junit 测试? MockObjectTestCase 也不错。 这是我正在谈论的一个例子:
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());
}
}
我知道包装器方法甚至不是必需的,但可以更轻松地频繁调用它。 请注意 class 工作正常,我只对如何编写单元测试感兴趣。
如果您愿意稍微重构 class,我建议MessageResource
委托给MessageSource
实例,而不是扩展ResourceBundleMessageSource
。 然后我会在我的单元测试中使用模拟。 像这样:
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);
}
}
对于这个特定的例子,我可能不会费心去测试它。
如果您确实需要测试它,请尝试以下操作:
@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));
}
如果前两行很难写,那么不测试它就更有意义了。 如果您有多个这样的测试,请将前两行移动到设置夹具中。
我认为甚至不值得为此编写单元测试。 如果已经有针对 ResourceBundleMessageSource.getMessage() 的测试,那么这就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.