java - 如何使用spring和mockito获取被测对象的字段
问题描述
我有一个 spring 服务类,我在 @PostConstruct 方法下向 Executor 提交了一些任务。我写了一些测试,但它们的行为在所有运行中都不相同。有时都通过,有时尽管条件满足,但很少失败。
Class A {
Private final ExecutorService executorService = Executors.newCachedThreadPool();
private final Object obj1
private final Object obj2;
@Autowired
public A(Object obj1, Object obj2) {
this.obj1 = obj1;
this.obj2 = obj2;
}
@PostConstruct
public void process() {
executorService.submit(() -> {
obj1.doSomething();
obj2.doOtherthing();
});
}
//Some other methods.....
}
Class ATest {
A a;
@Mock
Object obj1;
@Mock
Object obj2;
@Before
public void setUp() {
a = new A(Obj1, Obj2);
}
@Test
public void processTest {
doNothing.when(obj1.doSomething);
doNothing.when(obj1.doOtherthing);
a.process();
verify(obj1).doSomething();
verify(obj2).doOtherthing();
}
@Test
public void otherTest {
//some test
}
}
所以我想在测试类中访问 executorService ,这样我就可以监控发生了什么,为什么测试表现不同。
任何建议或建议都会有所帮助。
解决方案
您可以为您创建一个包私有方法executorService
,并在测试中使用它来获取executorService
,但是您的测试类和被测类应该在同一个包中。
ExecutorService getExecutorService() {
return executorService;
}
除此之外,您可以改用@InjectMocks
注释@Before setUp()
。
@InjectMocks
private A a;
推荐阅读
- javascript - JavaScript 表单验证移除值
- python - 为什么子进程忽略 PATH,我该如何更改?
- android - 每个片段的工具栏或单个工具栏
- cmd - 将 Windows CMD 输出写入日志文件?
- php - 作曲家需要 phpoffice/phpspreadsheet 不起作用
- python - Python3 tkinter。如何让我的脚本记住用户所做的选择?
- java - 使用 Java 保存编码为 UTF-8 的 CSV 文件
- c++ - Container::value_type 的模板特化
- sql - 一个 SQL 对随机值求和
- android - 如何在没有用户交互的情况下启动 Open Camera 应用程序来拍照?