我有DAO类如下:-
//这里有一个类,它使用new // jdbcTemplate(dataSource)创建自己的jdbcTemplate
@Repository
public class MyDao {
@Autowired
@Qualifier("db2JdbcTemplate)"
JdbcTemplate jdbcTemplateDB2;
public int insertTable(Company comp) {
int ret = 0;
try {
ret = this.jdbcTemplateDB2(db2DataSource).update(ïnsert into "+ table_name + "(COL1,COL2,...) values (?,?,?,..)",
ps-> {
ps.setString(1, comp.getName);
.......
});
return ret;
} catch (Exception ex) {
// log etc
}
}
}
我的测试类如下:-
@RunWith(MockitoJUnitRunner.class)
public class MyTest {
@Mock
JdbcTemplate jdbcTemplateDB2;
Company comp = new Company(); // this is followed by setter fn to set values.
MyDao mydao = Mockito.mock(MyDao.class);
Mockito.when(((jdbcTemplateDB2.update(any(String.class),
any(PreparedStatement.class))).thenReturn(2);
ReflectionUtils.setField(mydao, "jdbcTemplateDB2", jdbcTemplateDB2);
int bVal = mydao.insertTable(cmp);
}
}
iVal没有获得值2。它正在进行原始更新调用并返回类似0/1的值。正在获得UnnecessaryStubbingException。如果我进行了宽松()调用,异常会消失,但结果是相同的(预期宽松只会删除警告)。如何使此存根工作?
1条答案
按热度按时间qnyhuwrf1#
在此行中:
MyDao mydao = Mockito.mock(MyDao.class);
您正在创建一个mock对象,它覆盖了您实际的类x行为,但您似乎想测试这个类,所以它没有任何意义。您需要做的是:创建类的一个实际示例并将mock注入其中(您使用ReflectionUtils
来完成此操作,但Mockito有自己的简单机制来完成此操作)。推荐阅读:Mockito documentation(非常全面,但很简单)。
重要提示:是的。