java - anyString() 为 null 而不是空字符串
问题描述
我正在尝试测试我的 dao,但是当我通过 anyString() 时,在我的 dao 中它以空字符串的形式出现,因此,它没有返回我想要的模拟对象
@InjectMocks
private Dao dao;
@Mock
@Qualifier("jdbcTemp")
private JdbcTemplate jdbcTemp;
@Test
public void testGetData() {
List<MyObj> list = new ArrayList<>();
MyObj myObj = new MyObj();
myObj.setMethod("method val");
list.add(myobj);
Mockito.when(jdbcTemp.query(anyString(), Mockito.any(PreparedStatementSetter.class),
Mockito.any(Dao.MyRowMapper.class))).thenReturn(list);
List<MyObj> res = dao.getData(param1, param2); // this is empty, instead of having a value of 1
Assertions.assertThat(res).isNotNull();
}
我的道
@Autowired
private String query;
@Autowired
private JdbcTemplate jdbcTemp;
public List<MyObj> getData(String arg1, String arg2) {
List<MyObj> list = new ArrayList<MyObj>();
try {
// query below is null instead of empty string
list.addAll(jdbcTemp.query(query, new PreparedStatementSetter() {
public void setValues(PreparedStatement pstmt) throws SQLException {
pstmt.setString(PARAM_ONE, arg1);
pstmt.setString(PARAM_TWO, arg2);
}
}, new MyRowMapper()));
} catch (Exception exp) {
}
return list;
}
解决方案
因此,正如您正确提到anyString()
的,仅匹配非空字符串。当你传入query
你的方法时,你应该验证你的 autowiredquery
不为空。作为替代方案,您可以坚持any()
或nullable(String.class)
匹配 null。由于您的测试不依赖于query
您可以安全地使用它的值。
但是,由于您的代码没有显示您的注入是如何工作的,我们无法进一步调查您的问题。如果您有必要这样做,请添加相关的代码部分。
推荐阅读
- vba - 以不同的设置时间间隔运行多个宏 vba 通过按钮开始 - 按钮停止
- ios - iOS:仪器挂起模拟器的应用程序启动模板
- shell - 使用带数字后缀的 awk 将大文件拆分为较小的文件
- webpack - 如何在没有端口的情况下在 localhost 上运行 webpack-dev-server
- coq - 引入假设然后立即对其执行另一种策略的策略
- reactjs - NextJs与动态路由——空参数场景如何处理?
- android - 无法在片段 [Android] 中将项目添加到我的 ListView
- javascript - 在 vuejs 中使用带有 forEach 的道具
- python - 如何管理xml模板?需要一些例子
- c++ - 当类成员参数具有相同名称时,如何定义构造函数?