java - 如何模拟更改实例属性状态的 void 方法

标签 java unit-testing mocking mockito

在 Foo 类中,我有一个方法来初始化使用 Set 数据结构的过滤器。注意:假设 Foo 类中不允许依赖注入(inject) namesToFilter

public class Foo {

   Set<String> namesToFilter;

   public Foo() {
       namesToFilter = new HashSet<>();
       initialize();
   }  

   void initialize() {
     namesToFilter.add("XYZ");
     namesToFilter.add("ABC");
   }

}

如何在mockito中模拟initialize方法,以便我可以测试其他情况,例如 nameToFilter.add("PQR") ?

最佳答案

您可以访问Foo实例并更改namesToFilter集。

您可以使用 Whitebox(导入 org.mockito.internal.util.reflection.Whitebox;)来实现此目的。

示例:

Set set = (Set) Whitebox.getInternalState(instance, "namesToFilter");

现在您可以根据需要更改设置。

关于java - 如何模拟更改实例属性状态的 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41510018/

相关文章:

java - Spock:在 "where"子句表中使用 Mock?

javascript - 用于创建 js 应用程序的假服务器

java - 鉴于最终 block 未正确填充,加密问题

java - multidex 应用程序在尝试运行仪器测试时出现 ZipException : duplicate entry for junit,

java - 执行末尾添加空格且不带空格的删除查询

unit-testing - 在 Intellij IDEA 中启动慢速 Grails 测试

Python代码: Information on Execution Trace of loops/conditionals

c# - Moq:Mock SetUp 方法在测试期间仅返回 null

java - 在 Android 中从麦克风录制 wav 文件 - 问题

unit-testing - 如何编写 gdb 脚本(使用 python)?示例添加断点,运行,我们碰到了什么断点?