项目用的是maven,所需jar包在pom.xml文件里面配置,单元测试要用的jar具体如下:

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <scope>test</scope>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.mockito</groupId>
  8. <artifactId>mockito-all</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework</groupId>
  12. <artifactId>spring-test</artifactId>
  13. <scope>test</scope>
  14. </dependency>

从上面的jar包可以看到,这次主要用了Junit  mock 和 spring-test.

具体的构建项目这里就不多说了,接下来我们直接看下testBean里面的具体代码应用:

具体类:

  1. package com.lcc.parser;
  2.  
  3. import com.lcc.dto.RatingTagFieldDto;
  4. import com.lcc.rating.RatingTagField;
  5.  
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. public final class RatingTagFieldDtoParser {
  10.  
  11. public static List<RatingTagFieldDto> fromRatingTagFieldList(List<RatingTagField> ratingTagFieldList) {
  12. if (ratingTagFieldList == null) {
  13. return new ArrayList<>();
  14. }
  15.  
  16. List<RatingTagFieldDto> resultList = new ArrayList<>();
  17. for (RatingTagField ratingTagField : ratingTagFieldList) {
  18. RatingTagFieldDto ratingTagFieldDto = new RatingTagFieldDto();
  19. ratingTagFieldDto.setId(ratingTagField.getId());
  20. ratingTagFieldDto.setKey(ratingTagField.getKey());
  21.  
  22. resultList.add(ratingTagFieldDto);
  23. }
  24. return resultList;
  25. }
  26.  
  27. }

测试类:

  1. package com.opentrans.otms.core.infrastructure.service.impl.xtt.rmi.parser;
  2.  
  3. import com.lcc.dto.RatingTagFieldDto;
  4. import com.lcc.rating.RatingTagField;
  5. import com.opentrans.lcc.rating.RatingTagFieldRepository;
  6. import junit.framework.Assert;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9. import org.junit.runner.RunWith;
  10. import org.mockito.Mock;
  11. import org.mockito.runners.MockitoJUnitRunner;
  12.  
  13. import java.util.ArrayList;
  14. import java.util.List;
  15.  
  16. import static org.mockito.Mockito.when;
  17.  
  18. @RunWith(MockitoJUnitRunner.class)
  1. public class RatingTagFieldDtoParserTest {
  2. @Mock
  3. private RatingTagFieldRepository ratingTagFieldRepository;
  4.  
  5. @Before
  6. public void doBefore() {
  7. List<RatingTagField> ratingTagFields = mockRatingTagField();
  8. when(ratingTagFieldRepository.findActiveTags()).thenReturn(ratingTagFields);
  9. }
  10.  
  11. @Test
  12. public void testFromTatingTagFieldList() {
  13. List<RatingTagField> ratingTagFields = ratingTagFieldRepository.findActiveTags();
  14. List<RatingTagFieldDto> ratingTagFieldDtos = RatingTagFieldDtoParser.fromRatingTagFieldList(ratingTagFields);
  15. RatingTagFieldDto ratingTagFieldDto = ratingTagFieldDtos.get(0);
  16. Assert.assertEquals(ratingTagFieldDto.getId(), Long.valueOf(111));
  17. Assert.assertEquals(ratingTagFieldDto.getKey(), "asdfghjkl");
  18. }
  19.  
  20. private List<RatingTagField> mockRatingTagField() {
  21. List<RatingTagField> ratingTagFields = new ArrayList<>();
  22. RatingTagField ratingTagField = new RatingTagField();
  23. ratingTagField.setId(111L);
  24. ratingTagField.setKey("asdfghjkl");
  25. ratingTagField.setActive(true);
  26. ratingTagFields.add(ratingTagField);
  27. return ratingTagFields;
  28. }
  29. }
  1. 上面的@RunWith注解我们还可以用springJunit4下面的class,只要我们的项目是支持spring的,就可以用
  1. SpringJUnit4ClassRunner.class,但是如果我们用的是SpringJUnit4ClassRunner.class,就必须要加上@ContextConfiguration注解,指向xml文件;
  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @ContextConfiguration("ConnectionEventMailTest-context.xml")

如果对mock不理解的可以去看一下官方文档;

关于MockitoJUnitRunner.class 和 SpringJUnit4ClassRunner.class 的区别:

Mock下面的类不与数据库进行数据交互,测试类里面的数据是我们纯mock出来的,

而spring下面的类是可以与数据库进行数据交互的,如果我们要进行数据交互就必须指向xml进行数据库连接。

这两个的具体应用要看我们所要写的test类是否需要进行数据库数据交互。

  1.  
  1. 号外号外!!!
  2. 如果我们的javabean里面的属性是private修饰的,而且还没有get set方法(例如id,如果我们考虑的是自增长或者使用sequnce,我们是不支持对id进行set的),
    测试的时候又需要用到id,该怎么办呢?
    我们可以用java给我们提供的映射去操作,这个类是Field,在java.lang.reflect下面。
    接下来看下具体的代码实现,这段代码是一个工具类下面的一个方法,去给一个class set id
  1. public static void setDomainId(Class<?> clazz, Object domain, String key, Object value, boolean isSupperField) {
  2. try {
  3. if (isSupperField) {
  4. clazz = clazz.getSuperclass();
  5. }
  6. Field field = clazz.getDeclaredField(key);
  7. field.setAccessible(true);
  8. field.set(domain, value);
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. }

除了id,其他属性也可以用这个,原理是一样的。

  1. reflectionset get 方法
  1. public static <T> void reflectionSet(Class<? super T> clazz, T obj, String name, Object value) {
  2. Field field = null;
  3. while (!Object.class.equals(clazz)) {
  4. try {
  5. field = clazz.getDeclaredField(name);
  6. break;
  7. } catch (NoSuchFieldException e) {
  8. clazz = clazz.getSuperclass();
  9. }
  10. }
  11. try {
  12. field.setAccessible(true);
  13. field.set(obj, value);
  14. } catch (Exception e) {
  15. throw new RuntimeException(e);
  16. }
  17. }
  18.  
  19. public static <T, R> R reflectionGet(Class<? super T> clazz, T obj, String name) {
  20. Field field = null;
  21. while (!Object.class.equals(clazz)) {
  22. try {
  23. field = clazz.getDeclaredField(name);
  24. break;
  25. } catch (NoSuchFieldException e) {
  26. clazz = clazz.getSuperclass();
  27. }
  28. }
  29.  
  30. try {
  31. field.setAccessible(true);
  32. return (R) field.get(obj);
  33. } catch (Exception e) {
  34. throw new RuntimeException(e);
  35. }
  36. }
  1.  
  1.  
  1.  

Junit+Mock单元测试的更多相关文章

  1. junit+mock+spring-test构建后台单元测试

    from:从0开始,构建前后端分离应用 1. 一些基本概念 1.1 为什么要进行单元测试?我自己的理解是 1.能够快速发现问题.避免衍生BUG的出现     在对一些现有代码进行修改时,或者修改现有B ...

  2. Java单元测试(Junit+Mock+代码覆盖率)---------转

    Java单元测试(Junit+Mock+代码覆盖率) 原文见此处 单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测 ...

  3. JUnit + Mockito 单元测试(二)

    摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...

  4. JUnit + Mockito 单元测试(二)(good)

    import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...

  5. 使用Junit进行单元测试

    使用Junit进行单元测试 一.目的和要求 JUnit是一款由Erich Gamma(<设计模式>的作者)和Kent Beck(极限编程的提出者)编写的开源的回归测试框架,供Java编码人 ...

  6. JUnit & JMockit单元测试

    JUnit&JMockit单元测试总结 1.JUnit简介 Java单元测试框架业内应用较多的是JUnit,它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的 ...

  7. JUnit + Mockito 单元测试

    原 JUnit + Mockito 单元测试(二) 2015年01月05日 17:26:02 sp42a 阅读数:60755 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  8. java如何使用JUnit进行单元测试

    注:所有内容都是在eclipse上实现,关于eclipse的安装和jdk的安装配置,请看:http://www.cnblogs.com/fench/p/5914827.html 单元测试是什么? 百度 ...

  9. JUnit 4 单元测试

    Individual Project ——JUnit 4 单元测试 学习到JUnit单元测试,我拿来测试之前写过的一个计算器(两个依存类:Calc.java CalcFunction.java).代码 ...

随机推荐

  1. Codeforces 979 D. Kuro and GCD and XOR and SUM(异或和,01字典树)

    Codeforces 979 D. Kuro and GCD and XOR and SUM 题目大意:有两种操作:①给一个数v,加入数组a中②给出三个数x,k,s:从当前数组a中找出一个数u满足 u ...

  2. 19.Python转义字符及用法

    在前面的章节中,我们曾经简单学习过转义字符,所谓转义,可以理解为“采用某些方式暂时取消该字符本来的含义”,这里的“某种方式”指的就是在指定字符前添加反斜杠 \,以此来表示对该字符进行转义. 举个例子, ...

  3. ValueError: Cannot assign "\<QuerySet [<Area: China>]\>": "Area.parent" must be a "Area" instance.

    在研究才Django自关联的过程中,在插入数据时爆出如下错误: ValueError: Cannot assign "<QuerySet [<Area: China>]&g ...

  4. 服务不支持 chkconfig 的解决办法

    在chkconfig --add servername的时候老是提示服务不支持 chkconfig 经过查找,解决办法如下. 1.脚本tomcatstart前三行如下: #!/bin/bash #ch ...

  5. 用python绘制趋势图

    import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.image as mping #mping用于读取图片 import date ...

  6. VNC连接Ubuntu 16.04桌面灰色的问题解决

        1.安装gnome apt-get install --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daem ...

  7. .NET Assembly File Format

    https://docs.microsoft.com/en-us/dotnet/standard/assembly/file-format .NET defines a binary file for ...

  8. windows10下如何完全卸载串口驱动?

    答: 所需步骤如下: 1. 以管理员身份启动cmd 2. 在cmd中输入两行命令来启动设备管理器 3. 设置view->Show hidden devices 4. 在Ports (COM &a ...

  9. javascript循环语句

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 使用谷歌提供的SwipeRefreshLayout下拉控件进行下拉刷新的实现数据的刷新

    package com.loaderman.swiperefreshdemo; import android.os.Bundle; import android.os.Handler; import ...