我们可以为 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
,也可以重用提取的代码。