内容简介:翻译自: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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First PHP & MySQL(中文版)
Lynn Beighley、Michael Morrison / 苏金国、徐阳 / 中国电力 / 2010-6 / 98.00元
通过《深入浅出PHP&MySQL(影印版)》,你将学习:准备好把你的静态HTML网页提升到下一个层次并使用PHP和MySQL建立数据库驱动的网站了吗?《深入浅出PHP& MysQL》是一本快捷实用的指南,让你的动态网站快速运行。自己动手建立实际应用程序,从视频游戏高分留言板到在线交友网站。当你完成后,你将可以进行验证表单、使用会话ID和cookies工作、执行数据库查询和联接、处理文件I/0操作等......一起来看看 《Head First PHP & MySQL(中文版)》 这本书的介绍吧!