unit-testing - 单元测试时后门 java 访问的替代方法

标签 unit-testing junit private-members

我正在尝试使用多个私有(private)方法对一个类进行单元测试。每个私有(private)方法都可能相当广泛。

我可以将方法包范围化(这会导致警告),或者我可以使用下面的代码来测试它:

Method method = instance.getClass().getDeclaredMethod("methodName");
method.setAccessible(true);
Object object = method.invoke(instance);
assertNotNull(object);

这个类不是一个“上帝对象”,它的大部分方法都涉及它的所有领域。

关于如何更好地处理这个问题有什么建议吗?

最佳答案

测试私有(private)方法也可能是一种测试气味。

我的引用书是一本好书 http://www.manning.com/rainsberger/

  1. 您应该测试行为而不是方法:粒度有点不同。

    Example 1 : to test a Pile, how do you test push and pop without referencing each other? But testing the global behavior is possible. This reminds us that, even for testing, objects are the right granularity, not methods.

    Example 2 : when you want to test the interaction between several objects, testing method by method is clearly not correct, you want to test a global behavior.

  2. 如果一个方法不是公开的,它就不能被外界调用,它的行为也没有那么严格的定义。但最重要的是,如果您测试一个私有(private)方法,您以后将无法重构您的代码。所以应该只对公共(public)代码进行测试

关于unit-testing - 单元测试时后门 java 访问的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1498695/

相关文章:

c# - 如何在 .Net Core Web API 项目中对使用 Mapper 的方法进行单元测试

android - 如何自动化向 Android Activity 发送多个模拟 Intent 的测试?

java - 如何在 Arquillian 中测试 JPA

c# - 为什么可以从属性访问私有(private) const 字段?

c++ - 从 C# 切换到 C++。我的代码有什么问题?我需要标题来完成我想做的事情吗?一个文件问题中的类定义

reactjs - 如何使用 Jest 正确模拟 React Navigation 的 getParam 方法

java - 如何对调用私有(private)方法链的方法进行单元测试?

C++ 保护类的私有(private) char *

php - 如何使用过程代码库在 PHP 中编写单元测试?

unit-testing - JUnit 理论 : Why can't I use Lists (instead of arrays) as DataPoints?