繁体   English   中英

Junit 包装器测试用例 class

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM