Junit 是一个基于Java语言实现的单元测试的框架。通过Junit 测试框架就可以对项目中的某个类的方法进行测试。
本文假设大家都有Java开发经验,使用IDEA,以下是在maven项目中添加测试类的步骤
步骤一:加入依赖
首先,在pom.xml文件中加入Junit依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
步骤二:下载插件
下载插件:
File ——> Settings ——> Plugins ——> 搜索junit下载以下插件
至此,作为一个maven项目就可以开始使用Junit框架了
步骤三:开始测试
maven的test文件夹就是用来存放测试类的文件夹,所以对本项目的测试文件都存放在该目录下。
快捷生成对应类或者方法的测试类:到类名处,按下快捷键: CTRL + Shift + T 出现:
进入创建框:
点击OK后就会在test目录下创建一个自己定义测试类名称的测试类,以及勾选的方法。如下:
到这里,就可以在对应的方法中编写测试的方法,随便写写:
每个被生成出来的测试方法都有这个可以直接运行的标志,就不需要通过main方法,而可以直接只运行这一小部分。
基本的简单实践后,再来学学理论这一part,将会有更加明朗的认识。
上面我们以及初步知道JUnit测试框架可以用来编写一些测试类,但上面只是一个一个的运行测试类,如果在大型项目中,可不可以将所有测试方法统一组装起来运行呢?当然可以!这就是测试套件和测试运行器。
那如果想在测试中加一些判断,判断运行后的结果与期望效果是否一样,就可以使用断言。
JUnit是使用Java语言编写的一个框架,在使用时,我们需要导入对应的包,调用类的不同API来达到目的。
JUnit中最重要的就是 junit.framework
包,它包含了所有测核心类,最重要的四个类是:
类名 | 功能 |
---|---|
Assert | 断言方法的集合 |
TestCase | 多重测试固定装置 |
TestResult | 测试结果 |
TestSuite | 组合多个测试方法的套件 |
这个类就是用来判断程序测试结果和预期结果是否一样。有很多判断的方式,只有返回是错误,才会记录下来:
重点有的方法:
方法 | 作用 |
---|---|
void assertEquals(boolean expected, boolean actual) | 检查两个变量是否相等 |
void assertFalse(boolean condition) | 检查条件为假,不是false就错误 |
void assertNotNull(Object object) | 检查对象不为空,为null就错误 |
void assertNull(Object object) | 检查对象为空,不为null就错误 |
void assertTrue(boolean condition) | 检查条件为真 |
写个小栗子:
@Test
public void testAssert() {
int n = 5;
String s = "test", s1 = null;
assertEquals(n,5);
assertNotEquals(s,"tttt");
assertFalse(n > 6);
assertTrue(n == 5);
assertNotNull(s);
assertNull(s1);
}
TestCase 类的一些重要方法列式如下:
方法 | 功能 |
---|---|
int countTestCases() | 为被run(TestResult result) 执行的测试案例计数 |
TestResult createResult() | 创建一个默认的 TestResult 对象 |
String getName() | 获取 TestCase 的名称 |
TestResult run() | 一个运行这个测试的方便的方法,收集由TestResult 对象产生的结果 |
void run(TestResult result) | 在 TestResult 中运行测试案例并收集结果 |
void setName(String name) | 设置 TestCase 的名称 |
void setUp() | 每一个测试用例执行前执行 |
void tearDown() | 每一个测试用例执行后再执行 |
String toString() | 返回测试案例的一个字符串表示 |
举一个例子:
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class practice extends TestCase {
protected double fValue1;
protected double fValue2;
@Before
public void setUp() {
fValue1= 2.0;
fValue2= 3.0;
}
@Test
public void testAdd() {
double ans = fValue1 + fValue2;
}
@Test
public void testMul() {
double ans = fValue1 * fValue2;
}
@After
public void tearDown() {
fValue1= 0;
fValue2= 0;
}
}
这就是一个简单的测试类,两个test测试方法在执行前都会先执行setUp()方法,在执行结束后会执行tearDown()方法。还有两个相似的是beforeClass() 方法和afterClass() 方法它们都是在最开始/结束执行一次。
TestResult 类是用来统计收集所有执行测试案例的结果。
TestResult 类的一些重要方法如下:
方法 | 功能 |
---|---|
void addError(Test test, Throwable t) | 在错误列表中加入一个错误 |
void addFailure(Test test, AssertionFailedError t) | 在失败列表中加入一个失败 |
void endTest(Test test) | 显示测试被编译的这个结果 |
int errorCount() | 获取被检测出错误的数量 |
int failureCount() | 获取被检测出的失败的数量 |
void run(TestCase test) | 运行 TestCase |
int int runCount() | 获得运行测试的数量 |
void startTest(Test test) | 声明一个测试即将开始 |
void stop() | 标明测试必须停止 |
TestSuite 类是测试的组成部分。它可以将多种测试用例都组合起来一起运行。
TestSuite 类的一些重要方法列式如下:
方法 | 功能 |
---|---|
void addTest(Test test) | 在套件中加入测试用例 |
void addTestSuite(Class extends TestCase> testClass) | 将类中的测试加到套件中 |
int countTestCases() | 对这个测试即将运行的测试案例进行计数 |
String getName() | 返回套件的名称 |
void run(TestResult result) | 在 TestResult 中运行测试并收集结果 |
void setName(String name) | 设置套的名称 |
int testCount() | 返回套中测试的数量 |
static Test warning(String message) | 返回会失败的测试并且记录警告信息 |
来一个例子:
先创建了TestJunit1, TestJunit2, TestJunit3三个测试类,接着创建一个suite套件将它们组合起来一起运行。如下
import junit.framework.*;
public class JunitTestSuite {
public static void main(String[] a) {
TestSuite suite = new TestSuite(
TestJunit1.class, TestJunit2.class, TestJunit3.class );
TestResult result = new TestResult();
suite.run(result);
System.out.println("Number of test cases = " + result.runCount());
}
}
如果我们想在某一个测试类中不执行其中一个测试方法,就可以添加@Ignore 注释,添加后,这个方法就会被忽略而不会执行。
这就是JUnit的简单入门,如果文章有任何问题欢迎评论指正,希望能帮到你。也欢迎点赞关注一起进步!
参考文章:https://www.w3cschool.cn/junit/fegu1hv3.html