Java单测void类型的方法详解

 更新时间:2017年01月10日 08:34:13   作者:疯狂的蚂蚁  
这篇文章主要给大家介绍了Java中单测void类型的方法,文中给出了详细的示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,需要的朋友可以跟着小编下面来一起学习学习吧。

前言

我们在学Java的时候,老师或者一般的书上都写着,Java的基本类型有八种。分别是:byte、int、short、long、float、double、char、boolean。但是,今早我在看Java的圣经——《Thinking in Java》的时候,发现作者在说明数据类型的时候,把void也放上去了。这样就有九种了。百度了一下,有些书也是写的Java有九种基本类型。

Java的Sevice层会有很多void类型的方法,比如save*、update*,这类方法只是做一些更新,不会有返回值,其单测不能根据方法的返回值来编写,只能采用特殊方法;

本方法环境:Mockito、testng

被测试的方法:

想要被测试的VOID方法Java

@Override
 public void updateRuleName(Long ruleId, String newRuleName, Long ucId) {
 Assert.notNull(ruleId, "规则ID不能为Null");
 Assert.notNull(newRuleName, "规则名称不能为Null");
 Assert.notNull(ucId, "操作人的UCID不能为Null");
 
 String cleanNewRuleName = StringUtils.trim(newRuleName);
 if (StringUtils.isBlank(cleanNewRuleName)) {
  throw new IllegalArgumentException("新的规则名称不能为空");
 }
 
 // 查询规则对象
 Rule rule = queryRuleById(ruleId);
 if (null == rule) {
  throw new IllegalDataException("没有查到该规则");
 }
 
 rule.setRuleId(ruleId);
 rule.setRuleName(cleanNewRuleName);
 rule.setUpdateUcid(ucId);
 rule.setUpdateTime(new Date());
 
 ruleDao.updateSelective(rule);
 }

测试的方法:

void返回的方法测试Java

 @Test
 public void testUpdateRuleName() {
 Long ruleId = 1L;
 String newRuleName = "newRuleName";
 Long ucId = 123L;
 
 List<Rule> rules = new ArrayList<Rule>();
 Rule rule = new Rule();
 rule.setRuleStatus((byte) DBValueSetting.RULE_STATUS_TAKE_EFFECT);
 rules.add(rule);
 
 // 查询规则对象
 Map<String, Object> params = new HashMap<String, Object>();
 params.put("ruleId", ruleId);
 Mockito.when(ruleDao.queryRulesByCondition(params)).thenReturn(rules);
 
 Mockito.doAnswer(new Answer<Object>() {
  public Object answer(InvocationOnMock invocation) {
  // 断点2:这里随后执行
  Rule rule = (Rule) invocation.getArguments()[0];
  Assert.assertTrue(rule.getRuleName().equals("newRuleName"));
  return null;
  }
 }).when(ruleDao).updateSelective(Mockito.any(Rule.class));
 
 // 断点1:先执行到这里
 ruleService.updateRuleName(ruleId, newRuleName, ucId);
 }

如注释所示,如果加了两个断点的话,执行的过程中,会先执行最后的调用行,端点1执行的过程中,会执行到端点2的stub,这时候在断点2可以获取到方法执行的入参,对入参进行Assert校验,即可实现目的;

new Anwer是个接口,其中只有一个方法,用于设置方法调用的代理执行入口

doAnswer的实现Java

public interface Answer<T> {
 /**
 * @param invocation the invocation on the mock.
 *
 * @return the value to be returned
 *
 * @throws Throwable the throwable to be thrown
 */
 T answer(InvocationOnMock invocation) throws Throwable;
}

当代码执行到“ ruleDao.updateSelective(rule); ”的时候,会触发针对mock对象调用的拦截器,在拦截器中,会创建一个动态代理,动态代理的invocation就是new Answer中覆盖的方法;

使用拦截、代理两种方法,实现了对mock对象方法的入参、出参的设定和获取,使用这种方式,就可以校验VOID方法内部的执行类调用的情况;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • spring基础概念AOP与动态代理理解

    spring基础概念AOP与动态代理理解

    这篇文章主要为大家详细介绍了spring基础概念AOP与动态代理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 一文教你掌握Java如何实现判空

    一文教你掌握Java如何实现判空

    实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。所以本文小编为大家整理了Java中几个常见的判空方法,希望对大家有所帮助
    2023-04-04
  • Java中Mybatis,SpringMVC,Spring的介绍及联系

    Java中Mybatis,SpringMVC,Spring的介绍及联系

    这篇文章主要为大家详细介绍了Java中Mybatis,SpringMVC,Spring的介绍及联系,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Java如何优雅实现数组切片和拼接操作

    Java如何优雅实现数组切片和拼接操作

    在做一道算法题的时候用到数组合并,并且有性能要求,这里对Java数组合并进行总结,下面这篇文章主要给大家介绍了关于Java如何优雅实现数组切片和拼接操作的相关资料,需要的朋友可以参考下
    2024-04-04
  • Javaweb实战之实现蛋糕订购系统

    Javaweb实战之实现蛋糕订购系统

    随着网络的普及与发展,网上购物逐渐成为一种主流消费的方式。这篇文章主要介绍了通过JavaWeb制作一个线上蛋糕订购系统,文中示例代码讲解详细,需要的朋友可以参考一下
    2021-12-12
  • Java利用多线程模拟银行系统存钱问题

    Java利用多线程模拟银行系统存钱问题

    本文将利用Java多线程模拟银行系统存钱问题:使用两个不同的线程向同一个账户存钱。文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-08-08
  • java使用JOptionPane猜数字游戏

    java使用JOptionPane猜数字游戏

    这篇文章主要为大家详细介绍了java使用JOptionPane猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Java中的小知识点总结

    Java中的小知识点总结

    最近在复习Java的基础,遇到了一些比较偏的考核题目,特地总结一下需要注意的知识点!不过在使用IDE编程的时候,这些问题都会马上被IDE识别出来,编译是通不过的。我在这里提出来就相当于给初学者一些贡献吧
    2013-07-07
  • java jdk动态代理详解

    java jdk动态代理详解

    动态代理类的Class实例是怎么生成的呢,是通过ProxyGenerator类来生成动态代理类的class字节流,把它载入方法区
    2013-09-09
  • 在java中获取List集合中最大的日期时间操作

    在java中获取List集合中最大的日期时间操作

    这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论