java - 无法模拟采用接口的方法
问题描述
我的 Spring Boot 项目中有一项服务,其中我有一个采用接口的方法。
interface IT {}
class AService {
public String method(IT it) {}
}
我有两个实现该接口的类。
class AIT implements IT {}
class BIT implements IT {}
我根据需要在传递 AIT/BIT 类对象的其他服务中使用此服务方法。
现在,我正在为其他模拟服务的服务编写测试用例
public class OtherServiceTests {
@MockBean
private Service service;
@Before
public void setUp() {
// none of these mocks working
Mockito.when(service.method(Mockito.any()))
.thenReturn("");
Mockito.when(service.method(Mockito.any(IT.class)))
.thenReturn("");
Mockito.when(service.method(Mockito.any(BIT.class)))
.thenReturn("");
Mockito.when(service.method(Mockito.any(AIT.class)))
.thenReturn("");
// all returing to NullPointerException
otherService = new OtherSerice();
}
}
这些模拟都不适用于这种方法。其他模拟工作正常。它返回 NullPointerException 导致测试失败。
我是使用 mockito 进行测试的新手。如果有人可以指导我解决此问题,那么这对我将非常有帮助。
解决方案
模拟未初始化,注释@MockBean
应替换为@Mock
. 尝试像这样更改它:
public class AServiceTest {
@Mock
AService service;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void myTest(){
Mockito.when(service.method(Mockito.any())).thenReturn("");
assertEquals("", service.method(new AIT()));
}
}
推荐阅读
- bash - 在 CMD 中使用 WSL(Linux 的 Windows 子系统)bash 命令
- python - Django Login/Signup With own users 模型
- java - 如何计算使用 Hibernate 对 H2 数据库进行的 SQL 查询的数量
- angularjs - Angular HTML Autocomplete="nope" 或 "off" 无法在 Chrome 中从 CDN 托管
- android - 如何将字符串值从编辑文本传递到同一片段中的按钮
- json - 使用 Jmeter 验证 JSON 响应密钥
- lua - Lua以某种方式计算表中的总值
- python - 读取单元格excel win32com
- c# - 将 DataGridView 绑定到反射对象数组
- php - 提交表单后保持复选框处于选中状态。自定义帖子类型,WordPress