JUnit测试一个类:
package com.junit4; public class T { public int add(int x, int y) { return x + y; } public int devide(int x, int y) { return x / y; } }
eclipse创建JUuit测试类(用JUnit Test Case创建,创建时使用eclipse自带的JUnit jar包):
package com.junit4.test; //静态引入(也就是说,静态引入一个类,就可以直接使用这个类中的静态方法,而不需要类名了) import static org.junit.Assert.*; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import com.junit4.T; public class TTest { public TTest() { System.out.println("TTest"); } // 每一个测试方法之前运行 @Before public void before() { System.out.println("before"); } // 每一个测试方法之后运行 @After public void after() { System.out.println("after"); } // 所有测试开始之前运行[因为是这个类被初始化之前运行,所以这个方法是static] // 当需要取得一些很耗费时间的资源或者搭载一些很耗费时间的环境时,就会用到BeforeClass,比如:链接数据库 @BeforeClass public static void beforeClass() { System.out.println("beforeClass"); } // 所有测试结束之后运行 // 当需要把这些资源释放掉或环境卸载掉时,就会用到AfterClass,比如:关闭一些数据库链接 @AfterClass public static void afterClass() { System.out.println("afterClass"); } @Test public void testAdd() { int z = new T().add(4, 6); assertEquals(10, z); assertEquals("结果不等于10", 10, z); } // 在JUnit测试领域,有一句著名的话:keeps the bar green to keeps the code clean. // 忽略该测试方法 @Ignore // 期望代码抛出ArithmeticException异常,并且要在100毫秒内运行完毕 @Test(expected = java.lang.ArithmeticException.class, timeout = 100) public void testDevide() { new T().devide(4, 0); } }
运行结果:
beforeClass
TTest
before
after
afterClass
放弃旧的断言,使用hamcrest断言(这里就要用到assertThat方法,该方法最后一个参数使用hamcrest的匹配方法)
示例:
//n是不是大于1并且小于15
assertThat(n, allOf(greaterThan(1), lessThan(15)));
//n是不是大于16或者小于8
assertThat(n, anyOf(greaterThan(16), lessThan(8)));
//n是任何值
assertThat(n, anything());
//n是不是和nExpected相等[equalTo比较两个对象,is比较两个值]
assertThat(n, equalTo(nExpected));
//str是不是test字符串
assertThat(str, is("test"));
//str是不是不是test字符串
assertThat(str, not("test"));
//str是不是包含test字符串
assertThat(str, containsString("test"));
//str是不是以test字符串结尾
assertThat(str, endsWith("test"));
//str是不是以test字符串开头
assertThat(str, startsWith("test"));
//str忽略大小写后是不是和test字符串相等
assertThat(str, equalToIgnoringCase("test"));
//str忽略空格字符后是不是和test字符串相等
assertThat(str, equalToIgnoringWhiteSpace("test"));
//d是不是接近3.0,误差不超过0.3
assertThat(d, closeTo(3.0, 0.3));
//d是不是大于3.0
assertThat(d, greaterThan(3.0));
//d是不是小于3.0
assertThat(d, lessThan (10.0));
//d是不是大于等于3.0
assertThat(d, greaterThanOrEqualTo (5.0));
//d是不是小于等于3.0
assertThat(d, lessThanOrEqualTo (16.0));
//map是不是有test键对应的test值
assertThat(map, hasEntry("test", "test"));
//map是不是有test键
assertThat(map, hasKey ("test"));
//map是不是有test值
assertThat(map, hasValue ("test"));
//list是不是有test这一项
assertThat(list, hasItem ("test"));
具体操作:
引入两个jar包:hamcrest-core-1.3.jar、hamcrest-library-1.3.jar
package com.junit4.test; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*; import org.junit.Test; import com.junit4.T; public class TTest { @Test public void testAdd(){ int z = new T().add(4, 6); // 这个方法可以代替其他所有的assert*方法 assertThat("结果不正确", z, is(10)); assertThat("结果不正确", z, allOf(greaterThan(5), lessThan(20))); } }
运行之后出行异常:
java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:488)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
……
这个原因是:创建时使用eclipse自带的JUnit jar包和引入的hamcrest jar包使用的不是同一个ClassLoader
解决办法:删掉eclipse自带的JUnit jar包,引入JUnit官方下载的jar包
Error和Failures的区别:
Error是程序本身出错,而Failures是测试失败,程序在没有Error的前提下,才能进行Failures测试,比如:int x = 8/0,这个时候就是程序本身出错了,而把代码assertEquals("结果不等于10", 10, z);改成assertEquals("结果不等于9", 9, z);这个时候就是测试失败了。
相关推荐
JUnit4入门教程
### Junit4入门使用介绍 #### 一、简介 JUnit4是JUnit框架的第四代版本,它是Java领域中最广泛使用的单元测试框架之一。相比于之前的版本,JUnit4引入了许多新的特性和改进,使得编写和执行单元测试变得更加灵活和...
《Junit4 入门详解》 JUnit 是一个用于Java编程语言的单元测试框架,而Junit4作为其第四代版本,引入了许多新特性和改进,使得测试代码更加简洁、可读性强,大大提升了测试效率。这篇教程将带你走进Junit4的世界,...
在这个快速入门教程中,我们将深入探讨 JUnit 4 的核心特性,以及如何在实际项目中应用这些特性进行单元测试。 首先,JUnit 4 的最大亮点就是引入了 Annotation,这使得测试方法不再需要遵循传统的以 "test" 开头的...
#### 一、JUnit4入门实例 **1. 实例环境** 本章节主要介绍了JUnit4入门级别的环境搭建步骤。为了能够顺利进行JUnit4的实践,首先需要确保开发环境配置正确。 - **环境**: 使用的是MyEclipse 6.5作为集成开发环境...
Junit4作为Java领域最常用的单元测试框架,为开发者提供了方便、高效的测试工具。本文将深入探讨如何使用Junit4对名为Calculate的类进行单元测试,包括其加减乘除四个方法。 首先,我们需要了解Junit4的基本结构和...
使用JUnit4时,需要注意你的JDK版本应为1.5或更高,因为JUnit4依赖于Java的新特性。 JUnit的核心特点和结构包括: 1. 断言(Assertion):用于验证测试结果是否符合预期。 2. 测试套件(Test Suite):可以组织多个...
JUnit4单元测试必备入门教程 JUnit4概述 -------- JUnit4是JUnit框架有史以来最大的改进,其主要目标是利用Java5的Annotation特性简化测试用例的编写。Annotation是一种元数据,用于描述数据。在Java中可以用来和...
在Eclipse中,有两种方式添加Junit4库: 1. **添加Eclipse自带的Junit4**:进入项目属性页,选择Java Build Path,点击Add Library,接着在弹出的对话框中选择JUnit并选择相应的版本,最后点击Finish。如图2.1所示...
本文将深入探讨JUnit入门培训的关键概念和技术。 首先,我们要理解什么是Test Driven Development(TDD),即测试驱动开发。TDD是一种软件开发方法论,它提倡在编写实际业务代码之前先编写测试。通过这种方式,...
【jUnit入门教程 - jUnit教程】 jUnit是一款广泛应用于Java编程语言的单元测试框架,它使得开发者能够方便地编写和执行针对代码功能的测试用例。本教程旨在为初学者提供一个jUnit的基础入门指南,帮助理解如何利用...
在“JUnit4入门学习笔记.doc”这份文档中,我们可以期待找到以下关键知识点: 1. **JUnit介绍**:首先会介绍JUnit的基本概念,包括它的起源、目标以及在软件开发中的地位,以及与其它测试框架的比较。 2. **环境...
“入门级学习材料”表明这个压缩包可能是为初学者准备的,涵盖了如何使用JUnit4框架创建和运行测试的基本步骤。Eclipse开发环境是一个流行的Java集成开发环境,它支持JUnit插件,使得在Eclipse中编写和运行JUnit测试...
本资源“Junit入门练习代码”旨在帮助初学者掌握JUnit的基本概念和使用方法,通过实践来加深理解。下面我们将深入探讨JUnit的相关知识点。 1. **JUnit简介**:JUnit是Java语言中的一个开源测试框架,由Ernst Leiss...
### JUnit5学习入门知识点详解 #### 一、JUnit简介 JUnit是一个开源的Java单元测试框架,被广泛应用于软件开发中的测试驱动开发(TDD)流程之中。它支持开发者通过编写测试代码来验证软件功能是否符合预期,从而提高...
JUnit 使用入门培训(初级篇)1 JUnit 是 Java 语言中最流行的单元测试框架之一,它提供了许多功能强大且灵活的测试工具,帮助开发者编写高质量的代码。本文将从基础开始,指导读者如何使用 JUnit 进行单元测试。 ...
本资源包含“JUnit API和入门手册”以及“JUnit In Action”电子书,将帮助你深入理解和掌握JUnit的核心概念和使用方法。 首先,`JUnit4.1.chm`文件是JUnit 4.1版本的API参考文档,通常包含了类、接口、方法等详细...
JUnit 4是该框架的一个重要版本,它利用Java 5的注解(Annotation)特性极大地简化了测试用例的编写过程。 在介绍JUnit 4之前,我们先来看一下JUnit 3的测试用例编写方式。在JUnit 3中,单元测试的编写需要遵循一定...
### Junit入门培训资料(断言相关):深入解析与应用 #### Junit概述与重要性 JUnit,作为由Kent Beck和Erich Gamma共同开发的开源Java测试框架,已成为Java开发人员进行单元测试的首选工具。它不仅是Java编程语言...