java - 使用 JUnit 和 Mockito 对 DAO 类进行单元测试
问题描述
我有 DaoImpl 类:
public class MessageTypeDaoImpl implements MessageTypeDao{
public int[] createMessageTypes(final List<MessageType> messageTypes){
String sql = "INSERT INTO MSG_TYPE VALUES(?, ?)";
return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
MessageType messageType = messageTypes.get(i);
ps.setString(1, messageType.getMessageId());
ps.setString(2, messageType.getMessageName());
}
public int getBatchSize(){
return messageTypes.size();
}
});
}
我的测试:
@RunWith(MockitoJUnitRunner.class)
public class MessageTypeDaoImplTest {
@Mock
private JdbcTemplate jdbcTemplate;
@Spy
@InjectMocks
MessageTypeDaoImpl messageTypeDaoImpl;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void createMessageTypes() {
int[] returnCount = new int[1];
List<MessageType> messageTypeList = new ArrayList<MessageType>();
messageTypeList.add(getSampleMessageType());
messageTypeDaoImpl.createMessageTypes(messageTypeList);
doReturn(returnCount).when(messageTypeDaoImpl).createMessageTypes(messageTypeList);
assertEquals(returnCount, messageTypeDaoImpl.createMessageTypes(messageTypeList));
}
}
public MessageType getSampleMessageType(){
return new MessageType("messageTypeId", "messageTypeName");
}
测试成功,但是当我使用覆盖率运行 junit 测试时,它显示public void setValues()
方法没有被覆盖,因此我的整体单元测试行覆盖率低于要求。我们可以涵盖那部分吗?如果是,那么我们如何做到这一点?谢谢。
解决方案
试试下面的代码spinet。我也会介绍代码。我从头开始检查它,它起作用了。
int[] batchInsert=new int[] {1,2};
try {
Mockito.doAnswer(invocationOnMock -> {
PreparedStatement ps = Mockito.mock(PreparedStatement.class);
BatchPreparedStatementSetter psr = invocationOnMock.getArgument(1);
psr.setValues(ps, 1);
return batchInsert;
}).when(jdbcTemplate).batchUpdate(anyString(), Mockito.any(BatchPreparedStatementSetter.class));
推荐阅读
- python - 循环坐标列表并将坐标列表中的位置增加一以执行请求
- c# - 防止箭头键改变焦点,同时仍然允许键的功能
- c++ - 我想根据规则对工作表进行排序
- javascript - 检查一个键是否存在于数组中的所有对象中并设置一个布尔值
- c - 如何从输出中排除 10?
- python - Python客户端GRPC与AWS的不安全连接问题
- django - Django Restframework 优化
- bash - JMESPath 查询组合搜索与?并在 azure cloudshell bash cli 中包含关键字
- javascript - Javascript函数不断从MVC模型列表中的最后一项中检索数据
- ubuntu - 未找到 vala 包“xxxx”