Junit 单元测试

简介: Junit是一个单元测试工具,eclipse自带。 依赖: // http://mvnrepository.com/artifact/junit/junitcompile group: 'junit', name: 'junit', version: '4.12'1.使用步骤 1.先写源文件,假设要测验的是A.java. 2.在packageExplorer视图中,右击A.

Junit是一个单元测试工具,eclipse自带。

依赖:

// http://mvnrepository.com/artifact/junit/junit
compile group: 'junit', name: 'junit', version: '4.12'

1.使用步骤

1.先写源文件,假设要测验的是A.java.

2.在packageExplorer视图中,右击A.java源文件,选择 new| JUnit Test Case

图1 测试类自动生成

3.单击next出现下面的对话框。


图2 选择测试的方法

4.自动生成一个源文件,按照需求完善其中的代码,见图1 的 ATest.java

5.右击ATest.java,选择 run as|JUnit Test。


图3 测试结果图示

2.常用注解

@ BeforeClass:针对所有测试,只执行一次,且必须为 static void 
@ Before:初始化方法,对于每一个测试方法都要执行一次
@ Test:测试方法,在这里可以测试期望异常和超时时间 
@ After:释放资源,对于每一个测试方法都要执行一次
@ AfterClass:针对所有测试,只执行一次,且必须为static void 
所以,一个JUnit4的单元测试用例执行顺序为: 
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass; 
每一个测试方法的调用顺序为: 
@Before -> @Test -> @After; 
所有加注解的方法必须为 public

3.常用方法

void org.junit.Assert. assertEquals(Object expected, Object actual)
拿预期的与实际的进行对比。若不一致还会打印出哪里不一致。
#以两个queue进行assertEquals(),失败时打印结果见下。
java.lang.AssertionError: expected:
<[URLinfo1, __ct__URLinfo, __ct__URL_NotBot, __ct__URL_NotBot_vacation, __ct__URL_NotBot_vacation_5m_sum_perip, __ct__URL_NotBot_vacation_ajax_url_5m_sum_perip, alarm]> 
but was:
<[URLinfo, __ct__URLinfo, __ct__URL_NotBot, __ct__URL_NotBot_vacation, __ct__URL_NotBot_vacation_5m_sum_perip, __ct__URL_NotBot_vacation_ajax_url_5m_sum_perip, alarm]>
	at org.junit.Assert.fail(Assert.java:91)
	at org.junit.Assert.failNotEquals(Assert.java:645)
	at org.junit.Assert.assertEquals(Assert.java:126)
	at org.junit.Assert.assertEquals(Assert.java:145)
	at test.com.ctrip.search.antibot.count.util.UtilsTest.testTopoSort(UtilsTest.java:77)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

void org.junit.Assert. assertTrue(boolean condition)
期望结果为true。
void org.junit.Assert. assertFalse(boolean condition)
期望结果为false。
微笑问:集合类如何比较?
答:List,Set,Queue,Map这些集合类的抽象类都重写了equals()方法,所以可以直接比较,容器中的元素仍为容器时仍可比较。若放的是自己的类,这些类也需要重写equals()方法。

4.参数化测试

对于一个函数,我们准备了很多测试用例,如何批量测试呢?Junit的参数化测试可以满足。
@org.junit.runner. RunWith
在运行测试的时候会调用指定的类,通常用于@RunWith(Parameterized.class)。
此注解需要加在自己的类前面。
org.junit.runners. Parameterized
用于参数化测试的类。
@org.junit.runners.Parameterized. Parameters
此注解加在产生测试数据的方法上面。函数名无限制。返回值需要是Iterable<Object[]>,里面盛放的是参数1,参数2,...,参数n,预期结果。
例子:
对应的图见图4-1.

图4-1 Junit参数化测试

5.多线程测试

Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit()退出用例执行的。JVM都终止了,在测试线程启动的其他线程自然也无法执行。
“GroboUtils”这个工具可以用于多线程测试,但mvn仓库中似乎没有,先mark一下。
目录
相关文章
|
7月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
5月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
82 5
|
6月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
110 6
|
7月前
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
112 2
|
7月前
|
Java 测试技术 Maven
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
387 1
|
7月前
|
测试技术
如何使用 JUnit 测试方法是否存在异常
【8月更文挑战第22天】
183 0
|
7月前
|
Java 测试技术 Maven
Junit单元测试 @Test的使用教程
这篇文章是一个关于Junit单元测试中`@Test`注解使用的教程,包括在Maven项目中添加Junit依赖、编写带有@Test注解的测试方法,以及解决@Test注解不生效的常见问题。
|
7月前
|
前端开发 Java 测试技术
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
|
7月前
|
Java 测试技术 API
深入理解单元测试:JUnit框架在Java中的应用
【8月更文挑战第3天】本文将引导读者通过JUnit框架的镜头,探索单元测试的奥秘。我们将一起揭开单元测试的神秘面纱,了解其在软件开发中的关键作用,并具体学习如何在Java项目中应用JUnit进行有效的单元测试。文章不仅会涉及理论概念,还将通过具体的代码示例,展示如何编写和运行单元测试,以确保软件质量。让我们开始吧,一起踏上这段提升代码质量和开发效率的旅程。
78 0
|
9月前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
81 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等