java - JUnit 测试私有(private)变量?

标签 java unit-testing variables junit private

我被分配了对一个我从未直接使用 JUnit 进行过的类进行单元测试的任务,并且严禁更改包中的代码。这通常没有问题,因为我们的大多数单元测试只是为了功能和输入/输出的一致性,这可以通过运行例程并检查它们的返回值来完成。

但是,偶尔需要检查类中的私有(private)变量,或者直接编辑私有(private)变量来检查一些内部行为。有没有办法访问这些,无论是通过 JUnit 还是任何其他方式,以进行单元测试,而无需实际更改原始源包中的任何代码?如果不是,那么在单元测试员与编码员可能不是同一个人的现实世界中,程序员如何处理这个问题?

最佳答案

首先,你现在处于一个糟糕的境地——要为你最初创建的代码编写测试任务,并且没有任何更改——噩梦!与您的老板交谈并解释,如果不使其“可测试”,就无法测试代码。为了使代码可测试,您通常会做一些重要的更改;

关于私有(private)变量。你实际上永远不应该那样做。旨在测试私有(private)变量是当前设计出现问题的第一个迹象。私有(private)变量是实现的一部分,测试应该关注行为而不是实现细节。

有时,私有(private)字段会通过一些 getter 暴露给公共(public)访问。我这样做,但尽量避免(在评论中标记,例如“用于测试”)。

由于您无法更改代码,我看不到检查私有(private)变量的可能性(我的意思是真正的可能性,不像反射黑客等)。

关于java - JUnit 测试私有(private)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694715/

相关文章:

java - 重构和测试

javascript - 用空格混淆变量名

javascript - 在两个函数之间传递变量

java - Spring Data JPA - 创建自定义查询方法生成器

python - 将 Django 的系统检查合并到单元测试套件中?

java - 从 Google Map 获取结果并将数据传输回之前的 fragment

javascript - Jasmine spy On以及如何使用 spy 软件

c++ - 将文件内容存储到C++中的变量中

java - 相当于 Spring 框架的资源抽象

java - 如何确保在 Java 中销毁 String 对象?