JUnit使用简介

JUnit使用简介


      Unit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
      JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
      接下来介绍eclipse下JUnit的使用。因为目前新版本的JDK和eclipse都会自带JUnit4的包和JUnit测试的功能,所以并不需要去安装,当然如果版本比较老,没有JUnit功能,则需要另外安装,可以参见http://blog.youkuaiyun.com/oathevil/article/details/7524760.

一、首先创建一个待测试的项目

     待测项目calculate.java如下图所示: 

              

     该项目是一个简易的计算功能,实现了两个整数的加减乘除功能。

二、建立JUnit项目

     按照以下图示的步骤创建JUnit Test Case:

              

              

     勾选上红框里的setUpBeforeClass()、tearDownAfterClass()、setUp()和tearDown(),会自动生成annotation及相应的方法,如图为点击“finish”之后生成的TestCalculate.jave。

               

其中annotation,@BeforeClass、@AfterClass、@Before和@After的使用方法如下表所示,这四个annotation加上@Test是JUnit最常用的annotation:

@BeforeClass and @AfterClass@Before and @After
在一个类中只可以出现一次

在一个类中可以出现多次,即可以在多个方法的声明前加上这两个Annotaion标签,执行顺序不确定

方法名不做限制方法名不做限制
在类中只运行一次在每个测试方法之前或者之后都会运行一次

@BeforeClass父类中标识了该Annotation的方法将会先于当前类中标识了该Annotation的方法执行。
@AfterClass 父类中标识了该Annotation的方法将会在当前类中标识了该Annotation的方法之后执行

@Before父类中标识了该Annotation的方法将会先于当前类中标识了该Annotation的方法执行。
 @After父类中标识了该Annotation的方法将会在当前类中标识了该Annotation的方法之后执行
必须声明为public static必须声明为public 并且非static
所有标识为@AfterClass的方法都一定会被执行,即使在标识为@BeforeClass的方法抛出异常的的情况下也一样会。所有标识为@After 的方法都一定会被执行,即使在标识为 @Before 或者 @Test 的方法抛出异常的的情况下也一样会。

 JUnit中还有很多其他的annotation,关于这些annotation的说明和使用方法如下表:

JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation:
 @Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所有方法执行一次)
 @After:释放资源 对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所有方法执行一次)
 @Test:测试方法,在这里可以测试期望异常和超时时间
 @Test(expected=ArithmeticException.class)检查被测方法是否抛出ArithmeticException异常
 @Ignore:忽略的测试方法
 @BeforeClass:针对所有测试,只执行一次,且必须为static void
 @AfterClass:针对所有测试,只执行一次,且必须为static void
 一个JUnit4的单元测试用例执行顺序为:
 @BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
 每一个测试方法的调用顺序为:
 @Before -> @Test -> @After; 
摘自其他博客。(由于找不到网址了,以后看到再补)

三、JUnit的使用

JUnit为我们提供了一些辅助函数,他们用来帮助我们确定被测试的方法是否按照预期的效果正常工作,通常,把这些辅助函数称为断言。

常用的Assert(断言):1、assertEquals(a, b) Asserts that two primitive values are equal.

                                    测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)

                               2、assertFalse(a) Asserts that a condition (a) is false.

                                    测试a是否为false(假),a是一个Boolean数值。

                               3、assertTrue(a) Asserts that a condition is true.

                                    测试a是否为true(真),a是一个Boolean数值

                               4、assertNotNull(a) Asserts that an object isn't null.

                                    测试a是否非空,a是一个对象或者null。

                               5、assertNull(a) Asserts that an object is null.

                                    测试a是否为null,a是一个对象或者null。

                               6、assertNotSame(a, b) Asserts that two objects do not refer to the same object.

                                    测试a和b是否没有都引用同一个对象。

                               7、assertSame(a, b) Asserts that two objects refer to the same object.

                                    测试a和b是否都引用同一个对象。

如下图是使用断言并且运行测试的截图:

               

如图,代码中红框就是使用了断言,检测两个数相加的结果与7比较(这里需要注意下,之前待测程序使用了两个浮点数,然而rassertEquals(double,double)方法已过时,测试出现问题,故将程序改为了两个整数的加减乘除)。结果图片左边的框报告出测试未通过,到此为止测试结束。

测试程序中可以有多个@Test,在JUnit4.11后可以使用 @FixMethodOrder 注解改变每个测试的顺序。

目前当程序中有多个@before和@after注解还没有弄明白,如有大神了解,请指导。

有了JUnit,单元测试和回归测试变得好容易,所以经常使用JUnit对于中大型项目来说,有很大的益处

2015-05-25 22:34:18

---------------------------------------------------

人生并不像火车要通过每个站似的经过每一个生活阶段。

     人生总是直向前行走,从不留下什么。 

                                                    —— 刘易斯

转载于:https://www.cnblogs.com/Aenan/p/4529045.html

<think> 首先,用户的问题是基于提供的引用材料查找JUnit使用方法。引用[1]到[5]提供了关于JUnit的基本用法、依赖、测试类创建、断言方法等信息。我需要根据这些引用内容,结构化地回答用户的问题。 用户指令要求: - 所有行内数学表达式使用 $...$ 格式,但在这个上下文中,可能不需要数学表达式,因为主题是JUnit测试框架。 - 独立公式使用 $$...$$ 格式并单独成段 – 同样,可能不适用。 - LaTeX语法正确 – 需要确保任何技术术语或代码块正确。 - 使用中文回答 – 整个响应必须是中文。 - 生成相关问题 – 在回答末尾添加相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如 [^1]。 - 回答结构清晰,帮助用户逐步解决问题,保证真实可靠。 关键引用内容: - 引用[1]:JUnit的基本用法包括创建测试类、编写测试方法、使用断言进行验证以及运行测试。以JUnit 5为例,步骤包括创建测试类、编写测试方法等。 - 引用[2]:JUnitJava的单元测试框架,由Kent Beck和Erich Gamma建立。包含Maven依赖示例、TestService类和UnitTest示例。 - 引用[3]:断言方法,如Assertions.assertEquals。 - 引用[4]:Spring提供的测试套件,扩展Junit测试用例。 - 引用[5]:常见用法如@Test注解。 用户的问题: "我想查找JUnit使用方法 请问JUnit使用方法" 所以,我需要总结JUnit使用方法,基于引用内容。 结构化回答: 1. **介绍JUnit**:简要解释JUnit是什么。 2. **基本步骤**:根据引用[1],列出使用JUnit 5的基本步骤。 - 创建测试类 - 编写测试方法 - 使用断言进行验证 - 运行测试 3. **依赖设置**:根据引用[2],提到Maven依赖。 4. **示例代码**:提供简单的代码示例,如引用[2]中的TestService和UnitTest。 5. **断言方法**:根据引用[3],解释断言如assertEquals。 6. **常见注解**:根据引用[5],提到@Test等注解。 7. **Spring集成**:根据引用[4],简要提及Spring的扩展。 确保引用标识:在回答中,当引用具体段落时,在末尾添加 [^1], [^2] 等。 生成相关问题:在最后添加几个相关问题。 回答结构: - 开头:介绍JUnit使用方法。 - 主体:逐步解释步骤。 - 代码块:使用代码块展示示例。 - 结尾:总结并添加相关问题。 使用中文: - 所有内容用中文撰写。 数学表达式:可能不需要,但如果有任何技术表达,确保使用$...$。例如,如果有等式,但这里可能没有。 代码块格式: - 使用代码块显示代码,如示例中所示。 最终结构: 1. JUnit简介 2. JUnit 5的基本使用步骤 3. 依赖设置 4. 示例代码 5. 断言方法 6. 常见注解 7. Spring测试套件 8. 相关问题 引用标识:例如,提到创建测试类时添加 [^1],因为引用[1]有相关内容。 </think>### JUnit使用方法 JUnitJava 语言的单元测试框架,由 Kent Beck 和 Erich Gamma 开发,用于实现白盒测试(即程序员知道内部实现逻辑)。它以注解为基础,简化了测试类的创建、测试方法的编写和断言的验证过程。下面我将基于 JUnit 5(最新版本)逐步介绍基本使用方法,确保内容真实可靠。参考引用的材料包括 JUnit 的基本步骤、依赖配置、断言方法和常见注解[^1][^2][^3][^4][^5]。 #### 1. **基本步骤(JUnit 5)** JUnit 5 的使用包括四个核心步骤: - **创建测试类**:为被测试的类(如 Service 类)创建一个对应的测试类,通常命名为 `被测试类名 + Test`(例如 `TestServiceTest`)[^1]。 - **编写测试方法**:在测试类中,使用 JUnit 注解(如 `@Test`)定义测试方法。每个方法对应一个测试用例[^1][^5]。 - **使用断言进行验证**:在测试方法中,用断言方法(如 `Assertions.assertEquals()`)验证预期结果与实际结果是否一致[^1][^3]。 - **运行测试**:通过 IDE(如 IntelliJ IDEA 或 Eclipse)或构建工具(如 Maven)运行测试,查看测试报告[^1]。 #### 2. **依赖设置** 在 Java 项目中,需添加 JUnit 5 的依赖。如果使用 Maven,在 `pom.xml` 中添加以下依赖(Spring Boot 项目可集成 `spring-boot-starter-test`)[^2][^4]: ```xml <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.8.2</version> <scope>test</scope> </dependency> <!-- 对于 Spring 项目 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> ``` #### 3. **示例代码** 以下是一个完整示例,包含被测试的 Service 类和对应的测试类: - **被测试类(Service)**: ```java package com.service; import org.springframework.stereotype.Service; @Service public class TestService { public String concatenate(String a, String b) { return a + b; } } ``` - **测试类(JUnit 5)**: ```java package com.service; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Assertions; public class TestServiceTest { @Test // 表示这是一个测试方法[^5] void testConcatenate() { TestService service = new TestService(); String result = service.concatenate("Hello", "World"); Assertions.assertEquals("HelloWorld", result); // 断言验证结果[^3] } } ``` 运行此测试类后,如果断言通过,测试成功;否则报告错误。 #### 4. **常用断言方法** JUnit 提供了多种断言方法用于验证逻辑: - `Assertions.assertEquals(expected, actual)`: 验证预期值与实际值相等[^3]。 - `Assertions.assertNotNull(object)`: 验证对象非空。 - `Assertions.assertTrue(condition)`: 验证条件为真。 示例: ```java @Test void testAddition() { int sum = 10 + 5; Assertions.assertEquals(15, sum); // 验证 10 + 5 等于 15[^3] } ``` #### 5. **常见注解** JUnit 5 使用注解简化测试: - `@Test`: 标记测试方法,无需 main 方法即可运行[^5]。 - `@BeforeEach`: 在每个测试方法前执行(用于初始化)。 - `@AfterEach`: 在每个测试方法后执行(用于清理)。 - `@ParameterizedTest`: 支持参数化测试(如多组输入数据)[^3]。 示例参数化测试: ```java import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @ParameterizedTest @ValueSource(ints = {2, 4, 6}) void testEvenNumber(int num) { Assertions.assertTrue(num % 2 == 0); // 验证数字为偶数[^3] } ``` #### 6. **Spring 集成测试** 对于 Spring 项目,可以使用 Spring Test 扩展 JUnit,简化依赖注入和上下文加载[^4]。示例: ```java import org.springframework.boot.test.context.SpringBootTest; import org.springframework.beans.factory.annotation.Autowired; import org.junit.jupiter.api.Test; @SpringBootTest public class SpringIntegrationTest { @Autowired private TestService testService; // 自动注入 Service @Test void testServiceInjection() { Assertions.assertNotNull(testService); // 验证注入成功 } } ``` ### 总结 JUnit使用方法总结为:添加依赖 → 创建测试类 → 编写测试方法(使用注解) → 添加断言验证 → 运行测试JUnit 5 增强了灵活性和可读性,特别适合单元测试和集成测试。对于 Spring 项目,结合 `spring-boot-starter-test` 能进一步提升效率[^1][^2][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值