单元测试框架——Junit5

这篇具有很好参考价值的文章主要介绍了单元测试框架——Junit5。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Junit

Junit是一个开源的用于Java语言的单元测试框架,也是Java方向使用最广泛的单元测试框架。

在pom.xml中引入Junit5相关依赖

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite</artifactId>
    <version>1.8.2</version>
    <scope>test</scope>
</dependency>

1. 注解

  • @Test:表示一个方法/用例
  • BeforeEach:表示被注解的方法在其它所有方法执行前都要执行一遍,也就是说其它方法有3个它就要执行3遍
  • @BeforeAll:表示被注解的方法在其它方法之前执行(使用该注解的方法必须定义成static)
  • @AfterEach:表示被注解的方法应该在其它方法执行后都要执行一遍,其它方法有4个就执行4遍
  • @AfterAll:表示被注解的方法在其它方法后执行一遍就可以了(使用该注解的方法必须定义成static)
public class JunitDemo {
    private static ChromeOptions options;
    private static ChromeDriver driver;
    @BeforeAll
    public static void init() {
        options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        driver = new ChromeDriver(options);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));//隐式等待两秒
    }

    @Test
    public void test1() {
        driver.get("https://www.baidu.com");
        driver.findElement(By.cssSelector("#kw")).sendKeys("Junit");
        driver.findElement(By.cssSelector("#su")).click();
    }

    @AfterAll
    public static void quit() throws InterruptedException {
        driver.quit();
    }
}

前后执行代码

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class JunitDemo2 {

    @BeforeEach
    public void BeforeEach() {
        System.out.println("@BeforeEach");
    }
    @AfterEach
    public void AfterEach() {
        System.out.println("@AfterEach");
    }

    @Test
    public void test1() {
        System.out.println("test1");
    }
    @Test
    public void test2() {
        System.out.println("test2");
    }
    @Test
    public void test3() {
        System.out.println("test3");
    }
}

运行结果

@BeforeEach
test1
@AfterEach


@BeforeEach
test2
@AfterEach


@BeforeEach
test3
@AfterEach

2.断言

很多编程语言都有断言C语言和Java都是有断言功能的,但断言一遍是出现在测试阶段,如果在生产环境使用断言,只要一旦触发断言程序就会立即终止。

在Junit中提供了一些断言方法

  • Assertions.assertEquals(预期值,实际值):如果预期和实际值不相同就会触发断言
  • Assertions.assertNotEquals(预期值,实际值):如果预期值和实际值匹配就会触发断言
public class AssertDemo {
    private static ChromeOptions options;
    private static ChromeDriver driver;

    @BeforeAll
    public static void init() {
        options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        driver = new ChromeDriver(options);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
    }

    @Test
    public void test1() {
        driver.get("https://www.baidu.com");
        WebElement element = driver.findElement(By.cssSelector("#su"));
        String button = element.getAttribute("value");
        Assertions.assertEquals("百度一下",button);
    }

    @AfterAll
    public static void quit() {
        driver.quit();
    }
}
  • Assertions.assertTrue():如果括号里的表达式值为False就会触发断言
  • Assertions.assertFalse():如果括号里的表达式值为True就会触发断言
  • Assertions.assertNull():如果括号里的表达式的值不为null就会触发断言
  • Assertions.assertNotNull():如果括号里的表达式的值为null就会触发断言

3.测试用例执行顺序

Junit的默认执行顺序是不确定的,官网文档中也没有给出明确的执行顺序。但我们可以使用Junit里提供的方法来手动设置用例的执行顺序,文档中给出了很多的排序方法。

这里介绍方法的排序,通过@order注解来排序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//标注当前类使用方法来进行排序
public class JunitOrderTest {
    @Test
    @Order(3)
    void test1() {
        System.out.println("aaa");
    }
    @Test
    @Order(2)
    void test2() {
        System.out.println("bbb");
    }
    @Test
    @Order(1)
    void test3() {
        System.out.println("ccc");
    }
}

运行结果

ccc


bbb


aaa

4.测试套件Suite

1) 指定多个类

通过测试套件可以将多个类的测试用例一起执行,通过@Suite@SelectClasses注解配合实现

/**
 * 指定类来添加到套件中执行
 */
@Suite
@SelectClasses({JunitDemo.class,JunitDemo2.class})
public class RunAllSuite {
    @Test
    void test() {
        System.out.println("@Suite");
    }
}

单元测试框架——Junit5

运行结果

单元测试框架——Junit5

2) 指定包

指定包,添加到套件中执行,需要注意的是执行包下面所有Test命名的文件中的所有@Test注解的用例。

这里指定的是junit包下的Test命名的类

@Suite
@SelectPackages("junit")//指定包下所有以Test命名的类中所有被@Test注解的用例
public class runAllSuite {
}

单元测试框架——Junit5

5. 参数化

有的时候我们的测试方法需要传递参数,而有多个参数写多个方法又比较麻烦,所以需要使用Junit的参数化。通过@ParameterizedTest注解标注类型参数化。

1) 单参数

单参数通过@ValueSource注解来实现,@ValueSource(类型={参数1,参数2,…})

@ValueSource中支持的类型有:

  • short
  • byte
  • int
  • long
  • float
  • double
  • char
  • boolean
  • Stirng
  • Class

在对应的类型使用后面+s使用

public class ParameterTest {
    @ParameterizedTest
    @ValueSource(strings = {"张三","李四","王五"})
    void test1(String name) {
        System.out.println("name:"+name);
    }
}

运行结果

name:张三

name:李四

name:王五

2) 多参数

多参数使用@CsvSource注解,@CsvSource(value={“张三,18”,“李四,20”,…})

public class ParameterTest {
    /**
     * 多参数
     * @param name
     * @param age
     */
    @ParameterizedTest
    @CsvSource(value = {"张三,18","李四,20","王五,25"})
    void test2(String name,Integer age) {
        System.out.println("name:"+name+"age:"+age);
    }
}

运行结果

name:张三

name:李四

name:王五

多参数可以指定分割符,通过delimiterString属性设置

public class ParameterTest {
    @ParameterizedTest
    @CsvSource(value = {"张三-18","李四-20","王五-25"},delimiterString = "-")
    void test3(String name,Integer age) {
        System.out.println("name:"+name+"age:"+age);
    }
}

如果参数里包含逗号就要使用单引号做转义字符

@ParameterizedTest
    @CsvSource(value = {"'张,三',18","李四,20","王五,25"})
    void test2(String name,Integer age) {
        System.out.println("name:"+name+"age:"+age);
    }

3) 文件注入

如果参数非常多,在代码中编写不太友好,就可以借助文件注入的方式来添加,通过@CsvFileSource来指定

指定读取resources目录

@ParameterizedTest
@CsvFileSource(resources = "/test.txt",delimiterString = " ") //指定文件中参数以空格分割
void test4(String name,int age) {
    System.out.println("name:"+name+"age:"+age);
}

test.txt文件内容

张三 18
李四 20
王五 25
赵六 30

指定读取本机文件

@ParameterizedTest
    @CsvFileSource(files = "C:\\Users\\HeHanYu\\Desktop\\code\\Java\\JavaCode\\spring\\ssm_blog_system\\src\\test\\java\\file\\test.txt",delimiterString = " ")
    void test5(String name,int age) {
        System.out.println("name:"+name+"age:"+age);
    }

6.动态参数

单参数

通过@MethodSource指定方法的返回值为动态参数,返回值可以是Stream流,List、Set等

public class ParameterTest {


    @ParameterizedTest
    @MethodSource("demo")
    void test6(String name) {
        System.out.println(name);
    }
    static Stream<String> demo() {
        return Stream.of("张三","李四");
    }
    static List<String> createV() {
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");

        return list;
    }
    static Set<String> createValue() {
      Set<String> set = new HashSet<>();
      set.add("张三");
      set.add("李四");
      set.add("王五");

      return set;
    }
}

多参数

使用Arguments可以实现多参数文章来源地址https://www.toymoban.com/news/detail-503048.html

public class ParameterTest {

    @ParameterizedTest
    @MethodSource("multiparameter")
    void test7(String name,int age) {
        System.out.println(name+":"+age);
    }

    static Stream<Arguments> multiparameter() {
        return Stream.of(Arguments.arguments("张三",18),Arguments.arguments("李四",25));
    }
}

到了这里,关于单元测试框架——Junit5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Junit5+Mockito单元测试详解

    Junit5+Mockito单元测试详解

    1.宏观层面:AIR原则 A:Automatic(自动化) 全自动执行,输出结果无需人工检查,而是通过断言验证。 I:Independent(独立性) 分层测试,各层之间不相互依赖。 R:Repeatable(可重复) 可重复执行,不受外部环境( 网络、服务、中间件等)影响。 2.微观层面:BCDE原则 B: Bord

    2024年01月17日
    浏览(17)
  • SpringBoot2---单元测试(Junit5)(1)

    SpringBoot2---单元测试(Junit5)(1)

    org.junit.vintage junit-vintage-engine test org.hamcrest hamcrest-core org.springframework.boot spring-boot-starter-test test 现在版本: @SpringBootTest class Boot05WebAdminApplicationTests { @Test void contextLoads() { } } 以前: @SpringBootTest + @RunWith(SpringRunner.class) SpringBoot整合Junit以后。 编写测试方法:@Test标注(注意需要

    2024年04月29日
    浏览(8)
  • 13.Springboot整合junit5单元测试与生成单元测试覆盖率

    13.Springboot整合junit5单元测试与生成单元测试覆盖率

    现在基本大公司都要求单元测试了,保证我们代码得质量,而我司更是要求覆盖率要达到60%以上,所以搞一下。 这里有两个方法: 1.使用maven自带得test,idea右侧maven模块执行项目下得test 2.使用cmd命令,在你的项目pom文件所在目录 ,打开cmd,执行如下: 结果如下:打开site文

    2024年02月16日
    浏览(11)
  • 静态方法 单元测试 springboot+mokito+junit5

    CodecUtils的方法是静态类,使用@InjectMocks不能有用,因为这个注解只能用于非静态的对象。 想要为静态方法写单元测试,可以使用Mockito.mockStatic(Class classToMock)方法,它可以返回一个MockedStatic对象,用于模拟静态方法的调用。 1.导入依赖 2.单元测试 可以参考如下地址,了解如何

    2024年04月25日
    浏览(7)
  • 单元测试junit(原始版本、Spring Boot各版本、junit5)使用介绍

    单元测试junit(原始版本、Spring Boot各版本、junit5)使用介绍

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 单元测试 junit各版本 使用介绍 官

    2023年04月16日
    浏览(12)
  • 深度揭秘JUnit5与Mockito的单元测试神秘面纱

    深度揭秘JUnit5与Mockito的单元测试神秘面纱

    在今天的学习中,我们将深入研究 JUnit 和Mockito,这是 Java 开发中最强大的 单元测试 工具之一。通过学习如何编写清晰、高效的单元测试,我们将揭开单元测试的神秘面纱,助力你在项目中写出更健壮的代码。 提示: 今天的代码是在第九天代码的基础上进行开发,我们将为

    2024年02月02日
    浏览(20)
  • SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试

    SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试

    因为继承了 spring-boot-starter-parent ,所以我们依赖的 spring-boot-starter-test 不需要写具体的版本,可以直接集成父级的版本定义。其中, spring-boot-starter-web 是用于提供 REST API 的 web 容器, spring-boot-starter-test 可以提供各种测试框架的, spring-boot-maven-plugin 是将 SpringBoot 应用打包为

    2024年04月15日
    浏览(11)
  • 在 Java 中使用JUnit5进行单元测试和自动化测试

    单元测试和自动化测试是现代软件开发过程中必不可少的环节,可以提高代码质量和开发效率。JUnit5是Java中流行的单元测试框架,本文将介绍如何在Java中使用JUnit5进行单元测试和自动化测试。 2.1 单元测试的基本概念和原理 单元测试是一种测试方法,用于对软件系统中的最

    2024年02月03日
    浏览(12)
  • Spring Cloud中Controller单元测试 Junit5 & MockMvc

    在Spring Cloud中进行Controller的单元测试,使用Junit5和Mock。 Controller: 方式一:使用@SpringBootTest + @AutoConfigureMockMvc 方式二:使用@WebMvcTest + @ImportAutoConfiguration(RefreshAutoConfiguration.class) 解决 No Scope registered for scope name \\\'refresh\\\' 异常 注入Mockmvc方式有两种 方式一:(@AutoConfigureMockMvc / @

    2024年02月16日
    浏览(9)
  • 如何在 Java 中使用JUnit5进行单元测试和自动化测试

    单元测试和自动化测试是现代软件开发过程中必不可少的环节,可以提高代码质量和开发效率。JUnit5是Java中流行的单元测试框架,本文将介绍如何在Java中使用JUnit5进行单元测试和自动化测试。 单元测试是一种测试方法,用于对软件系统中的最小可测试单元进行测试。这些单

    2024年02月05日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包