JUnit 单元测试
目录
- 说明
- 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 单元测试相关推荐
- JUnit单元测试依赖包构建路径错误解决办法
JUnit单元测试依赖包构建路径错误解决办法: 选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→添加库→JUnit→选择合适的Junit库版本.
- Junit单元测试需要知道的一些知识点
Junit单元测试框架-基于java语言对的主流单元测试框架 @beforeClass-位于数据准备前期或者其他前期准备(测试类调用前) --用于提取代码中的共用部分减少冗余,只能声明注解一次 --必 ...
- java中JUnit单元测试的使用方法
package com.atguigu.java2;import java.sql.Date;import org.junit.Test;/** java中的JUnit单元测试* 步骤:(可以直接写@ ...
- JUnit单元测试中的setUpBeforeClass()、tearDownAfterClass()、setUp()、tearDown()方法小结
编写JUnit单元测试的时候,会用到 setUpBeforeClass().tearDownAfterClass().setUp().tearDown()这四个方法,例如用 eclipse新建一个ju ...
- SSM中进行Junit单元测试时无法注入service
场景 在SSM项目中进行Junit单元测试时调用外部的service时,在使用时打断点发现为空. 代码如下: public class AlipayTester {private PassOrderS ...
- surefire 拉起 junit 单元测试类 源码阅读(一)
根据surefire 拉起Junit单元测试类 输出的报错日志 跟踪执行过程: 日志1: java.lang.reflect.InvocationTargetExceptionat sun.refle ...
- junit单元测试断言_简而言之,JUnit:单元测试断言
junit单元测试断言 简而言之,本章涵盖了各种单元测试声明技术. 它详细说明了内置机制, Hamcrest匹配器和AssertJ断言的优缺点 . 正在进行的示例扩大了主题,并说明了如何创建和使用自定 ...
- spring junit单元测试
项目是有很多个功能块组成的,我们开发的时候,当我们开发出来一个功能,想要测试这个功能是否正确,不可能等到前端和后端全部写好了再进行测试,这样太浪费时间,有没有什么方法能直接测试后台的功能写的是否正确( ...
- Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test
1 package cn.zmh.PingCe; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.BeanPrope ...
- 七、Web服务器——Junit单元测试 反射 注解学习笔记
今日内容 1. Junit单元测试 2. 反射 3. 注解 Junit单元测试: * 测试分类:1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值.2. 白盒测试:需要写代码的.关注程 ...
最新文章
- python内置库之学习ctypes库(二)
- [Poetize6] IncDec Sequence
- 深度学习100例-生成对抗网络(DCGAN)手写数字生成 | 第19天
- nginx反向代理和负载均衡
- PHP考试插件,php秒杀插件?
- mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...
- #include sys/xxx.h头文件 UNIX头文件
- 索尼中国官微吐槽年假被狗吃了 官方称系统故障 理解孩子
- android定时器课程设计,定时器课程设计.doc
- 从零开始学 iOS 开发的15条建议
- django/python日志logging 的配置以及处理
- C++基础语言知识大汇总(不断更新!!!)
- 监控系统中的几种服务器,监控系统各种服务器
- JavaWeb学习(较全较简)
- DDCTF2018-黑盒破解 详细WP
- Smartbi的使用
- 【金猿投融展】易观数科——智能用户运营服务商
- Win10开了热点之后,电脑不能上网怎么解决?
- 1.2 网络爬虫分类
- python破解网易反爬虫机制