java - 使用 mockito 和 Junit5 使用参数模拟静态 void 方法
问题描述
我正在尝试模拟一个带有参数的静态 void 方法SMTPTools.send(Message)
我的部门:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>3.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.6.0</version>
<scope>test</scope>
</dependency>
尝试:
try (MockedStatic<SMTPTools> smtpToolsMocked = Mockito.mockStatic(SMTPTools.class)) {
smtpToolsMocked.when((msg) -> SMTPTools.send(msg)).thenAnswer((Answer<Void>) invocation -> null);
}
但它甚至没有编译原因
MockedStatic 类型中的 when(MockedStatic.Verification) 方法不适用于参数 (( msg) -> {})
但我明白为什么
解决方案
好的,它适用于:
@Test
public void staticTest() throws Exception {
try (MockedStatic<SMTPTools> smtpToolsMocked = Mockito.mockStatic(SMTPTools.class)) {
Message msg = null;
smtpToolsMocked.when((msg) -> SMTPTools.send(msg)).thenAnswer((Answer<Void>) invocation -> null);
SMTPTools.send(msg);
smtpToolsMocked.verify(Mockito.times(1), () -> SMTPTools.send(msg));
}
}
推荐阅读
- google-calendar-api - 如何在没有网络服务器的情况下在我的本地主机起始页上显示私人 Google 日历事件?
- azure - azure 服务主体名称是否需要是唯一的租户范围或订阅范围?
- 3d - 正交投影和 BSP-tree 从后到前渲染对象
- c - MPI 无法创建并行进程,在 MPI_INIT 处失败
- swiftui - ForEach(0...5,id: \.self) { n in --“n”的范围是什么?
- c# - 添加要在运行时对 Razor 页面可用的程序集/类型
- python - 通过 REST API 和 Python 连接到 Azure 存储模拟器
- kubernetes - 如何在 GKE 上将现有的 prometheus 用于 Grafana?
- python - 如何在 readlines 中拆分行并将它们保存在不同的列表中?
- javascript - 如何自定义X轴标签,即X轴标签与数据不同