java - 有没有办法让对象的私有方法在调用时什么也不做?
问题描述
我正在使用 JUnit、Mockito 和 ReflectionTestUtils 在 Java 中编写集成测试。我有以下情况:
我要测试的源代码:
class AClassINeed extends SomeClass{
public method_I_need_to_call(){
//some code
method_that_fails();
// lots of other calls
}
private boolean method_that_fails(){
// Instantiate a new local object of external dependency
// Call a method from this new object ==> AKA FAILURE
}
}
在我的测试方法中: 我需要在这里创建一个 realObject 以便所有真实的代码都得到练习。除了会失败的方法。我目前正在尝试这样:
AClassINeed realObject = new AClassINeed(Lots.class, Of.class, Parameters.class);
AClassINeed spyObject = Mockito.spy(realObject);
Method spyObjectPrivateMethod = spyObject.getClass().getDeclaredMethod("method_that_fails");
spyObjectPrivateMethod.setAccessible(true);
when(spyObjectPrivateMethod).thenReturn(true); // <== Syntax error "Cannot resolve method thenReturn(boolean)"
我怎样才能做到这一点?我无法创建 AClassINeed 的模拟对象,因为我想正常执行所有方法,但失败的方法除外。
我也尝试过这样的 ReflectionTestUtils:
Method failingMethod = realObject.getClass().getDeclaredMethod("method_that_fails", String.class, String.class);
failingMethod.setAccessible(true);
ReflectionTestUtils.setField(realObject, "method_that_fails", failingMethod); // <== Wrong! This cannot be done for methods
在这一点上,我难住了。
有没有办法让我在不嘲笑整个班级的情况下让那个失败的方法什么都不做?
解决方案
推荐阅读
- java - 如何让休眠创建不是自动生成的 TIMESTAMP?
- reactjs - React 中的暂停等待功能实现
- apache-spark - kafkashaded.org.apache.kafka.common.errors.TimeoutException:60000 毫秒后更新元数据失败
- assembly - 仅在 x86 程序集中加载地址的低字节?
- python - 我无法将卫星图像作为 geopandas 的背景
- python - SQLAlchemy:在另一个事务中间运行单独的事务
- node.js - pm2 节点服务器上 dns.js 上的 DNS 查询
- git - 如何避免在特定提交时启动自动管道?
- go - 为什么这个 websocket 服务器不向连接的客户端广播?
- python - 如何使用 Python 计算 csv 中唯一值的数量