如何测试只修改私有类成员变量的void方法?

栏目: 编程工具 · 发布时间: 5年前

内容简介:翻译自: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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C语言程序开发范例宝典

C语言程序开发范例宝典

2010-1 / 59.00元

《C语言程序开发范例宝典》全面介绍了应用C语言进行开发的各种技术和技巧,全书共分12章,内容包括基础知识、指针、数据结构、算法、数学应用、文件操作、库函数应用、图形图像、系统调用、加解密与安全性、游戏、综合应用等。全书共提供300个实例,每个实例都突出了其实用性。 《C语言程序开发范例宝典》既可作为C程序的初学者学习用书,也可作为程序开发人员、相关培训机构老师和学生的参考用书。一起来看看 《C语言程序开发范例宝典》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具