目录

  • 说明
  • junit的使用
  • spring整合junit
    • 依赖
    • 编写单元测试
    • 测试
  • springboot整合junit
    • 依赖
    • 编写单元测试
    • 说明
  • 常见问题

说明

  • 一般来说,封装的工具类库、服务端接口的核心service,都应该提供相应的单元测试;
  • junit 中有2个 @Test 注解:junit4 中开始提供 @org.junit.Test ,junit5 中开始提供 @org.junit.jupiter.api.Test,这2个注解在普通java项目中的使用基本相同,需要注意的是低版本 springboot 中可能没有 @org.junit.jupiter.api.Test,只能使用 @org.junit.Test 。

junit的使用

public class XxxTest {@Before //执行每个测试方法之前都会先执行@Before标注的方法public void init(){}@After //执行每个测试方法之后都会执行@After标注的方法public void destroy(){}@Testpublic void testA(){//提示信息可以缺省Assert.assertEquals("提示信息", "期望数据", "实际数据");}@Testpublic void testB(){}}
  • 包、类的路径与源码保持一致,测试类通常命名为原类名+Test,测试方法名一般命名为test+原方法名
  • 测试方法不能有入参、返回值类型要是void

spring整合junit

依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.8.RELEASE</version><scope>test</scope>
</dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope>
</dependency>

编写单元测试

@RunWith(SpringRunner.class)  //提供spring容器环境,这样@Autowired之类的注解才能注入所需依赖。如果当前测试类不需要spring容器环境,可缺省
@ContextConfiguration(locations = "classpath:spring-config.xml")  //指定配置文件的位置
// @ContextConfiguration(locations = {"classpath:spring-config1.xml","classpath:spring-config2.xml"})  //有多个时写成数组
public class UserMapperTest {@Autowired  //注入要测试的类的实例private UserMapper userMapper;@BeforeClass  //在测试这个类之前执行,常用于初始化静态成员变量public static void BeforeClass(){}@AfterClass  //在测试这个类之后执行public static void AfterClass(){}@Before  //每个测试方法执行之前都会执行此方法,常用于初始化实例的成员变量public void before(){}@After  //每个测试方法执行完毕后都会执行此方法public void after(){}@Test  //测试方法public void findUserByIdTest(){User user = userMapper.findUserById(1);//使用的Assert是junit中的,不要导错了Assert.assertEquals("返回的User对象与预期不符,未通过测试", user, new User(1,"chy",20));}@Ignore  //测试这个类时会忽略|跳过此方法,可备注一些信息// @Ignore("对应方法还存在bug,暂不测试")public void updateUserTest(){//.....}}

注意

  • @RunWith(SpringRunner.class),SpringRunner 是 SpringJUnit4ClassRunner 的别名,2个都可以
  • 在测试类前后执行用的是 @BeforeClass、@AfterClass,不是 @BeforeTestClass、@AfterTestClass
  • @BeforeClass、@AfterClass 标注的方法必须是没有入参、返回值是void的静态方法

测试

选择JUnit

springboot整合junit

依赖

用Spring Initializr创建springboot项目时,默认会自动添加junit的依赖。如果不使用Spring Initializr,可以手动添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions>
</dependency>

junit-vintage-engine是使用老版本junit所需的依赖,不需要,使用<exclusions>排除,当然留着也行。

编写单元测试

@RunWith(SpringRunner.class)
@SpringBootTest  // @SpringBootTest(classes = {MallApplication.class} )  //指定源码中的引导类,如果源码中只有1个引导类,可缺省classes属性。
// @WebAppConfiguration   //模拟ServletContext、提供web环境,如果这个测试类不涉及web,可缺省
public class UserMapperTest {@Autowiredprivate UserMapper userMapper;@BeforeClasspublic static void BeforeClass(){}@AfterClasspublic static void AfterClass(){}@Beforepublic void before(){}@Afterpublic void after(){}@Testpublic void testFindUserById(){User user = userMapper.findUserById(1);Assert.assertEquals("返回的User对象与预期不符,未通过测试", user, new User(1,"chy",20));}@Ignorepublic void testUpdateUser(){//.....}}

说明

1、每个测试类上都要写@RunWith、@SpringBootTest,很麻烦,可以封装为一个类,测试类都继承该类

@RunWith(SpringRunner.class)
@SpringBootTest
public class BaseTest {}

2、打包测试
一个测试类一个测试类地去点击运行,很麻烦,可以把测试类打包到一个类中,运行该类即可

@RunWith(Suite.class)
@Suite.SuiteClasses({UserMapperTest.class, GooodsMapperTest.class})  //数组中写要运行的测试类
public class TestSuits {}

3、在高版本的springboot中, spring-boot-starter-test 已经移除了junit 提供的 Assert,不能再使用 Assert.assertEquals() 之类的方法,可以使用spring自带的 Assert 。

常见问题

IDEA执行单元测试时报错

Error running ‘XxxTest.testXxx’: Command line is too long. Shorten command line for XxxTest.testXxx or also for JUnit default configuration?

可在父项目的 workspace.xml 中找到 <component name="PropertiesComponent">,加一个子元素

<property name="dynamic.classpath" value="true" />

JUnit 单元测试相关推荐

  1. JUnit单元测试依赖包构建路径错误解决办法

    JUnit单元测试依赖包构建路径错误解决办法: 选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→添加库→JUnit→选择合适的Junit库版本.

  2. Junit单元测试需要知道的一些知识点

    Junit单元测试框架-基于java语言对的主流单元测试框架 @beforeClass-位于数据准备前期或者其他前期准备(测试类调用前) --用于提取代码中的共用部分减少冗余,只能声明注解一次 --必 ...

  3. java中JUnit单元测试的使用方法

    package com.atguigu.java2;import java.sql.Date;import org.junit.Test;/** java中的JUnit单元测试* 步骤:(可以直接写@ ...

  4. JUnit单元测试中的setUpBeforeClass()、tearDownAfterClass()、setUp()、tearDown()方法小结

    编写JUnit单元测试的时候,会用到 setUpBeforeClass().tearDownAfterClass().setUp().tearDown()这四个方法,例如用 eclipse新建一个ju ...

  5. SSM中进行Junit单元测试时无法注入service

    场景 在SSM项目中进行Junit单元测试时调用外部的service时,在使用时打断点发现为空. 代码如下: public class AlipayTester {private PassOrderS ...

  6. surefire 拉起 junit 单元测试类 源码阅读(一)

    根据surefire 拉起Junit单元测试类 输出的报错日志 跟踪执行过程: 日志1: java.lang.reflect.InvocationTargetExceptionat sun.refle ...

  7. junit单元测试断言_简而言之,JUnit:单元测试断言

    junit单元测试断言 简而言之,本章涵盖了各种单元测试声明技术. 它详细说明了内置机制, Hamcrest匹配器和AssertJ断言的优缺点 . 正在进行的示例扩大了主题,并说明了如何创建和使用自定 ...

  8. spring junit单元测试

    项目是有很多个功能块组成的,我们开发的时候,当我们开发出来一个功能,想要测试这个功能是否正确,不可能等到前端和后端全部写好了再进行测试,这样太浪费时间,有没有什么方法能直接测试后台的功能写的是否正确( ...

  9. Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

    1 package cn.zmh.PingCe; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.BeanPrope ...

  10. 七、Web服务器——Junit单元测试 反射 注解学习笔记

    今日内容 1. Junit单元测试 2. 反射 3. 注解 Junit单元测试: * 测试分类:1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值.2. 白盒测试:需要写代码的.关注程 ...

最新文章

  1. python内置库之学习ctypes库(二)
  2. [Poetize6] IncDec Sequence
  3. 深度学习100例-生成对抗网络(DCGAN)手写数字生成 | 第19天
  4. nginx反向代理和负载均衡
  5. PHP考试插件,php秒杀插件?
  6. mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...
  7. #include sys/xxx.h头文件 UNIX头文件
  8. 索尼中国官微吐槽年假被狗吃了 官方称系统故障 理解孩子
  9. android定时器课程设计,定时器课程设计.doc
  10. 从零开始学 iOS 开发的15条建议
  11. django/python日志logging 的配置以及处理
  12. C++基础语言知识大汇总(不断更新!!!)
  13. 监控系统中的几种服务器,监控系统各种服务器
  14. JavaWeb学习(较全较简)
  15. DDCTF2018-黑盒破解 详细WP
  16. Smartbi的使用
  17. 【金猿投融展】易观数科——智能用户运营服务商
  18. Win10开了热点之后,电脑不能上网怎么解决?
  19. 1.2 网络爬虫分类
  20. python破解网易反爬虫机制

热门文章

  1. muduo 异步日志实现
  2. PDF文件怎么制作,PDF文件制作方法
  3. xmind思维导图怎么把字体变大_XMind 使用指南 | 让思维导图放大你的影响力
  4. 74AHC1G32GW 74系列逻辑芯片
  5. 大M法(Big M Method)
  6. Web安全深度剖析-笔记
  7. js生成xlsx/xls格式文件并下载到本地
  8. 判断推理——逻辑判断
  9. Delphi 11.0 Alexandria 来了
  10. 计算机模拟 matlab,MATLAB计算机模拟实例课件.ppt