Junit5的基础应用(四)

Junit5的基础应用

一、实验目的

二、实验环境(本实验的硬件和软件环境及使用仪器等)

三、实验实现过程

四、实验结果分析与总结


一、实验目的

1、掌握Junit5的架构;

2、掌握Junit5常用annotation的使用;

3、掌握Junit5新的应用;

4、掌握Junit5参数化测试的用法

二、实验环境(本实验的硬件和软件环境及使用仪器等)

硬件:PC电脑一台;

配置: window系统,内存大于4G  硬盘250G及以上

软件:eclipse、 jdk15

三、实验实现过程

实验内容:

任务1、掌握Junit5的架构

创建文件

代码如下:

package lab4;

import org.junit.jupiter.api.DisplayName;

import org.junit.jupiter.api.BeforeAll;

import org.junit.jupiter.api.AfterAll;

import org.junit.jupiter.api.BeforeEach;

import org.junit.jupiter.api.AfterEach;

import org.junit.jupiter.api.Disabled;

import org.junit.jupiter.api.Test;

@DisplayName("我的第一个Junit5测试用例")

public class MyFirstJunit5Test {

@BeforeAll

public static void init() {System.out.println("初始化数据");}

@AfterAll

public static void cleanup() {System.out.println("清理数据");}

@BeforeEach

public void tearup() {System.out.println("当前测试方法开始");}

@AfterEach

public void tearDown() {System.out.println("当前测试方法结束");}

@DisplayName("我的第一个测试")

@Test

void testFirstTest() { System.out.println("我的第一个测试开始测试");}

@DisplayName("我的第二个测试")

@Test

void testSecondTest() { System.out.println("我的第二个测试开始测试");}

@DisplayName("我的第三个测试")

@Disabled

@Test

void testThirdTest() {System.out.println("我的第三个测试开始测试");}

}

实验结果如下:

运行测试套件

结果截图

任务2、掌握Junit5常用annotation的使用

创建测试套件

代码如下:

package lab4;

import org.junit.jupiter.api.DisplayName;

import org.junit.jupiter.api.BeforeEach;

import org.junit.jupiter.api.Nested;

import org.junit.jupiter.api.Test;

@DisplayName("内嵌测试类")

public class NestUnitTest {

    @BeforeEach//在每个测试执行之前执行

    void init() {System.out.println("测试方法执行前准备");}

    @Nested//定义内嵌测试类

    @DisplayName("第一个内嵌测试类")//定义用例在测试报告中的展示名称

    class FirstNestTest {

       @Test//定义测试方法

       void test1() {System.out.println("第一个内嵌测试类执行测试1");}

       @Test//定义测试方法

       void test2() {System.out.println("第一个内嵌测试类执行测试2");}

    }

    @Nested//定义内嵌测试类

    @DisplayName("第二个内嵌测试类")//定义用例在测试报告中的展示名称

    class SecondNestTest {

       @Test//定义测试方法

       void test1() {System.out.println("第二个内嵌测试类执行测试1");}

       @Test//定义测试方法

        void test2() {System.out.println("第二个内嵌测试类执行测试2");}

    }

}

运行测试套件

运行结果截图

任务3、Junit5新的应用

创建文件

代码如下:

package lab4;

import org.junit.jupiter.api.BeforeEach;

import org.junit.jupiter.api.DisplayName;

import org.junit.jupiter.api.Nested;

import org.junit.jupiter.api.Test;

@DisplayName("内嵌测试类")

public class NestUnitTest {

@BeforeEach//在每个测试执行之前执行

void init() {System.out.println("测试方法执行前准备");}

@Nested//定义内嵌测试类

@DisplayName("第一个内嵌测试类")//定义用例在测试报告中的展示名称

class FirstNestTest {

@Test//定义测试方法

void test1() {System.out.println("第一个内嵌测试类执行测试1");}

@Test//定义测试方法

void test2() {System.out.println("第一个内嵌测试类执行测试2");}

}

@Nested//定义内嵌测试类

@DisplayName("第二个内嵌测试类")//定义用例在测试报告中的展示名称

class SecondNestTest {

@Test//定义测试方法

void test1() {System.out.println("第二个内嵌测试类执行测试1");}

@Test//定义测试方法

void test2() {System.out.println("第二个内嵌测试类执行测试2");}

}

}

package lab4;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Assertions;

import org.junit.jupiter.api.Test;

import org.junit.jupiter.api.DisplayName;

public class AssertThrowsExceptionTest {

@Test

@DisplayName("测试捕获的异常")

void assertThrowsException() {

String str = null;

//1、断言抛出异常,2,抛出IllegalArgumentException异常

Assertions.assertThrows(IllegalArgumentException.class, () -> {

Integer.valueOf(str);

});

}

}

package lab4;

import java.time.Duration;

import java.time.temporal.ChronoUnit;

import org.junit.jupiter.api.Assertions;

import org.junit.jupiter.api.Test;

import org.junit.jupiter.api.DisplayName;

public class AssertTimeoutTest {

    @Test

    @DisplayName("超时方法测试")

    void test_should_complete_in_one_second() {

                          //断言超时

       Assertions.assertTimeoutPreemptively(Duration.of(1, ChronoUnit.SECONDS),

              () -> Thread.sleep(2000));

    }

}

逐一运行测试套件

实验结果截图

任务4、Junit5参数化测试

创建ParameterizedUnitTest文件

创建

输入文件名

打开该文件进行编辑

代码如下:

package lab4;

import static org.junit.jupiter.api.Assertions.*;

import java.util.concurrent.TimeUnit;

import java.util.stream.Stream;

import org.junit.jupiter.api.Assertions;

import org.junit.jupiter.params.ParameterizedTest;

import org.junit.jupiter.api.Test;

import org.junit.jupiter.params.provider.CsvFileSource;

import org.junit.jupiter.params.provider.CsvSource;

import org.junit.jupiter.params.provider.EnumSource;

import org.junit.jupiter.params.provider.MethodSource;

import org.junit.jupiter.params.provider.NullAndEmptySource;

import org.junit.jupiter.params.provider.ValueSource;

public class ParameterizedUnitTest {

@ParameterizedTest

@ValueSource(ints = {2, 4, 8})

void testNumberShouldBeEven(int num) {

Assertions.assertEquals(0, num % 2);

}

@ParameterizedTest

@ValueSource(strings = {"Effective Java",

"Code Complete", "Clean Code"})

void testPrintTitle(String title) {

System.out.println(title);

}

@ParameterizedTest

@CsvSource({"1,One", "2,Two", "3,Three"})

void testDataFromCsv(long id, String name) {

System.out.printf("id: %d, name: %s", id, name);

}

/*@ParameterizedTest

@CsvSource(value = {"1|2","3|4"},delimiter = '|')

public void parameterizedCvsSourceTest(String fruit, int rank) {

System.out.println(fruit);

System.out.println(rank);

}*/

@ParameterizedTest

@CsvFileSource(resources = {"/lab4/CsvSource.csv"})

public void parameterizedCsvFileSourceTest(String id,String name){

System.out.println(id);

System.out.println(name);

}

/*@ParameterizedTest

@EnumSource(value = TimeUnit.class,mode = EnumSource.Mode.INCLUDE,names = {"DAYS","SECONDS"})

public void parameterizedEnumSourceTest(TimeUnit timeUnit){

System.out.println(timeUnit);

}*/

@ParameterizedTest

@EnumSource(value = TimeUnit.class,mode = EnumSource.Mode.MATCH_ANY,

names = {"^(M|N).+SECONDS$","SECONDS"})

public void parameterizedEnumSourceTest1(TimeUnit timeUnit){

System.out.println(timeUnit);

}

/*@ParameterizedTest

@MethodSource("methodSourceTestFactory")

public void parameterizedMethodSourceTest(Student student){

System.out.println(student.getName());

}

public static Stream<Student> methodSourceTestFactory(){

Student student = new Student("Junit5",23);

Stream<Student> student1 = Stream.of(student);

return student1;

}*/

/*@ParameterizedTest

@NullAndEmptySource //(等同于@NullSource@EmptySource 两个)

public void parameterizedNullAndEmptySourceTest(String nullSource){

System.out.println(nullSource.length());

}*/

}

实验结果如下:

四、实验结果分析与总结

实验代码量和工作量比较大,花费了大量时间完成,不断修改调试,解决报错,期间出现了无法使用测试用例的情况,折腾好久后通过重启软件解决。在运行结果时出现了的测试结果打叉叉,暂时没有解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值