service单元测试例子

发表于:2020-9-14 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:栗子~~    来源:CSDN

分享:
  junit常用注解
  @Test(timeout = 10)
  测试,该注解必须加到方法上
  timeout超时时间,单位是毫秒
  终止死循环,当达到设定的值,结束循环
  @Ignore
  忽略不想被测试的方法,该注解必须加到方法上,也可以加到类上(慎用)
  @RunWith(SpringJUnit4ClassRunner.class)
  把junit和spring整合到一块,该注解加到类上
  @ContextConfiguration(locations = {“classpath:conf/applicationContext.xml”})
  用于加载spring配置文件的注解,添加到类上
  locations代表spring配置文件路径的数组,数组的类型为Stirng
  classpath:这个东西代表从源包下开始寻找
  @Resource(name = “blogService”)
  注入属性的注解,就相当于set、get方法,name指明bean的id值
  @Before
  在所有方法之前执行,一般加到方法上
  @After
  在所有方法之后执行,一般加到方法上
  @Transactional
  @TransactionConfiguration(transactionManager = “transactionManager”, defaultRollback = true)
  上边这俩注解要一块用,用于事物控制,加到类上
  transactionManager代表配置文件中事务管理器bean的id值
  defaultRollback代表事物回滚,默认值为true,是回滚的
  assert常用方法
  Assert.assertEquals(“message”,A,B):
  判断对象A和B是否相等,这个判断比较时调用了equals()方法。
  Assert.assertSame(“message”,A,B):
  判断对象A和B是否相同,使用的是==操作符。
  Assert.assertTure(“message”,A):
  判断A条件是否为真。
  Assert.assertFalse(“message”,A):
  判断A条件是否不为真。
  Assert.assertNotNull(“message”,A):
  判断A对象是否不为null
  Assert.assertArrayEquals(“message”,A,B):
  判断A数组与B数组是否相等。
  公用注解
  @WebMvcTest
  主要用于controller层测试,只覆盖应用程序的controller层,HTTP请求和响应是Mock出来的,因此不会创建真正的连接。因此需要创建 MockMvc bean进行模拟接口调用
  @RunWith(SpringRunner.class) 
  @RunWith(SpringJUnit4ClassRunner)
  是Junit和Spring Boot test联系的桥梁
  @Slf4j
  日志
  基于mock的隔离测试和基于dbunit的普通测试
  可以分为两种:基于mock的隔离测试和基于dbunit的普通测试。
  隔离测试主要通过@Mock和@InjectMocks两个注解来实现模拟与被模拟。
  (假的) @Mock:模拟出一个Mock对象,对象是空的,需要指明对象调用什么方法,传入什么参数时,返回什么值
  when(tSettleDayPgcbMapper.query(aggregateQueryVo)).thenReturn(list);(配合@Mock使用,造假数据)
  @InjectMocks:依赖@Mock对象的类,也即是被测试的类。@Mock出的对象会被注入到@InjectMocks对象中
  初始化后 @Mock, @Spy, @InjectMocks等注解时
  使用: MockitoAnnotations.initMocks(this)
  例子:
  @RunWith(SpringJUnit4ClassRunner.class)
  @Slf4j
  public class TestQueryServiceImplTest {
        
        private TestQueryVo aggregateQueryVo;
        //日志信息
        private  static String DY_MSG = "";
              
        private final static String DY_MSG1 = "单元测试【TestQueryServiceImplTest】 FdQuery";
   
        /**月结数据查询*/
          @Mock
         private ElectricityBalanceMapper electricityBalanceMapper;
         /**日清汇总查询*/
          @Mock
         private TSettleDayPgcbMapper tSettleDayPgcbMapper;
       //这是依赖dao的service,injectmocks注解表示你要注入的目标
       @InjectMocks
       private TestQueryServiceImpl service;
         
        static{
              DY_MSG = DY_MSG1 ;
        }
      @Before
      public void setUp(){
          log.info("{}--start!!!!",DY_MSG);
          //模拟返回值
          List<TSettleDayPgcb> list = new ArrayList<TSettleDayPgcb>();
          //组装数据 start
          TSettleDayPgcb vo = new TSettleDayPgcb();
          vo.setTradeDate("202008");
          list.add(vo);
          //end
              @SuppressWarnings("resource")
              Scanner s = new Scanner(System.in);
              String  g = s.next().toString();
              aggregateQueryVo = new TestQueryVo();
              aggregateQueryVo.setTradeDate(g);
          MockitoAnnotations.initMocks(this);
          when(tSettleDayPgcbMapper.query(aggregateQueryVo)).thenReturn(list);
      }
              
        @Test
        public void testFdQuery() {
              AggregateResponseVo<AggregateElectricityVo> fdQuery = service.fdQuery(aggregateQueryVo);
              Assert.assertNotNull(fdQuery.getColumnList());
              Assert.assertNotNull(fdQuery.getLineList());
        }
      /**
      *
      * 结束
      * @author yangzhenyu
      * @date 2020/08/18
      *
      * */
        @After
        public void after(){
              log.info("{}--end!!!!",DY_MSG);
        }
  }

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号