内容简介:翻译自:https://stackoverflow.com/questions/4603847/how-to-test-void-method-that-only-modifies-private-class-member-variables
我正在尝试在一个初始化一些私有字段的类中对一个方法进行单元测试:
public void init(Properties props) throws Exception {
this.language = props.getProperty(Constants.LANGUAGE,Constants.LANGUAGE_DEFAULT);
this.country = props.getProperty(Constants.COUNTRY,Constants.COUNTRY_DEFAULT);
try {
this.credits = Integer.valueOf(props.getProperty(Constants.CREDITS_OPTION_NAME, Constants.CREDITS_DEFAULT_VALUE));
} catch (NumberFormatException e) {
throw new Exception("Invalid configuration: 'credits' does not contain a valid integer value.", e);
}
//rest of method removed for sake of simplicity
}
我的困境是我想断言语言,国家和信用字段是在调用init之后设置的,但是它们是私有的,没有公共访问器方法.我看到有两种解决方案可用于测试:
>创建用于访问私有字段的公共方法,然后在测试init方法后调用这些方法.
>使单元测试只调用init方法,并假设一切正常工作都没有抛出异常.
您认为测试此方法的理想方法是什么?
您可以使用反射来获取私有字段的值.例如:
Field field = YourClass.class.getDeclaredField("language");
field.setAccessible(true); //override the access restriction of it being private
field.get(yourObject);
如果类路径上有弹簧,则可以使用其ReflectionUtils / ReflectionTestUtils.
有时人们认为不应该验证私有字段,只有对象的公共状态才是单元测试的重点.从这个角度来看,暴露一个getter可能更好,甚至更好 – 抛出异常.
如果对象处于无效状态(如果未设置字段),则对象本身应负责通过抛出异常来强制其有效性.
翻译自:https://stackoverflow.com/questions/4603847/how-to-test-void-method-that-only-modifies-private-class-member-variables
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Google 广告高阶优化(第3版)
【美】Brad Geddes(布兰德.盖兹) / 宫鑫、康宁、王娜 / 电子工业出版社 / 2015-9 / 99.00元
《Google 广告高阶优化(第3版)》可以说是Google AdWords的终极指南,内容非常丰富,第三版在内容上进行了全面更新。介绍了AdWords的最新最完整的功能,阐释其工作原理,也提供了相应的优化方法、策略和实践教程,读者可以随时在自己的PPC广告系列中进行实践。第三版增添了50多页新内容,涵盖Google系统最近的所有变动,包括广告系列结构的变化、出价调整器、重定向、视频广告功能、全新......一起来看看 《Google 广告高阶优化(第3版)》 这本书的介绍吧!