【软件测试】Junit 理论+实践 —— 适合初学者的单元测试

    技术2026-02-22  16

    Junit

    一、Junit测试前期准备1. 什么是Junit2. 开启Junit 二、JUnit 理论知识1. Junit可以用来干什么?2. 重要API(1)Assert类(2 )TestCase类(3)TestResult 类(4)TestSuite 类

    一、Junit测试前期准备

    1. 什么是Junit

    Junit 是一个基于Java语言实现的单元测试的框架。通过Junit 测试框架就可以对项目中的某个类的方法进行测试。

    2. 开启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 理论知识

    1. Junit可以用来干什么?

    上面我们以及初步知道JUnit测试框架可以用来编写一些测试类,但上面只是一个一个的运行测试类,如果在大型项目中,可不可以将所有测试方法统一组装起来运行呢?当然可以!这就是测试套件和测试运行器。 那如果想在测试中加一些判断,判断运行后的结果与期望效果是否一样,就可以使用断言。

    2. 重要API

    JUnit是使用Java语言编写的一个框架,在使用时,我们需要导入对应的包,调用类的不同API来达到目的。 JUnit中最重要的就是 junit.framework 包,它包含了所有测核心类,最重要的四个类是:

    类名功能Assert断言方法的集合TestCase多重测试固定装置TestResult测试结果TestSuite组合多个测试方法的套件

    (1)Assert类

    这个类就是用来判断程序测试结果和预期结果是否一样。有很多判断的方式,只有返回是错误,才会记录下来: 重点有的方法:

    方法作用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); }

    执行,通过:

    (2 )TestCase类

    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() 方法它们都是在最开始/结束执行一次。

    (3)TestResult 类

    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)运行 TestCaseint int runCount()获得运行测试的数量void startTest(Test test)声明一个测试即将开始void stop()标明测试必须停止

    (4)TestSuite 类

    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

    Processed: 0.023, SQL: 9