如何使用 junit 和 mockito 为私有 void 方法编写测试用例



我们可以为 setAddr(( 方法编写测试用例吗,因为它是私有 void 方法,可以帮我吗?

class WCfg  {
private void setAddr(Cfg cfg, String... arg)
         throws Exception {
try {
} catch (Exception e) {
  throw new Exception("Invalid IP address.", e);
}
}
public String process(String... arg) throws Exception {
  MCfg mCfg = new MCfg();
  try {
    setAddr(mCfg, arg);
  } catch (Exception e) {
    return "Wrong argument format.";
  }
  cfg.write();
  return "success";
 }
}

每个私有方法总是直接或直接在某些公共或可访问方法中调用。因此,无需为他们写案例。

然后,如果您想为此编写测试用例,请使用:

Deencapsulation.invoke(SomeClassWherePrivateMethod.class, "methodName", argument1, argument2, argument3);

这里Deencapsulation来自mockit.Deencapsulation.

你可以从这里下载jar。

如果你真的必须,你可以使用反射。请参阅示例:http://onjavahell.blogspot.nl/2009/05/testing-private-methods-using.html

但也要阅读评论!我强烈建议不要这样做。如果你不能测试你的代码,这通常是设计不好的迹象。

如上所述,您不应该测试私有方法。始终测试类的协定而不是实现。否则,如果更改了类的实现,您将获得假阴性测试结果。我的意思是类的行为符合预期,但测试将失败。

在这种情况下,如果您在private方法中有复杂的逻辑,您应该考虑将其提取到单独的类中。此类可以package-private,也可以重用提取的代码。

相关内容

  • 没有找到相关文章

最新更新