了解JUnit测试框架

作者:~小明学编程  

文章专栏:测试开发

格言:热爱编程的,终将被编程所厚爱。
在这里插入图片描述

目录

注解

@Test注释

@BeforeEach  

@BeforeAll

@ AfterEach

@AfterAll

断言

assertEquals / assertNotEquals

assertTrue / assertFalse

测试的执行顺序

测试套件Suite

添加类

添加包

参数化

单参数

多参数

动态参数


注解

首先给大家补充一下我们本章要使用的一些依赖。

    <dependencies>

        <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>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-reporting</artifactId><version>1.8.2</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>


    </dependencies>

@Test注释

一般情况下我们想要调用一个方法的时候需要通过main()方法,但是加上我们的@Test注解之后就可以直接的使用该方法了。

这里可以看到我们加上注解之后多了run()的接口。

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

左边表示我们的测试顺利通过了。 

@BeforeEach  

@BeforeEach 注释意味着我们的每一个Test注释的方法执行之前都会先调用一次这个方法。

    @BeforeEach
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }

@BeforeAll

该注释意味着我们所有的方法执行之前会先执行一遍该注释所修饰的方法。

    @BeforeAll
    static void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }

@ AfterEach

@ AfterEach所修饰的方法会在每个@Test这样的方法修饰之后再去执行该注解修饰的方法。

    @BeforeEach
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }
    @AfterEach
    void test4() {
        System.out.println("ddd");
    }

@AfterAll

在所有的测试方法之后来调用来方法,只执行一次。

    @BeforeEach
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test2() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }
    @AfterAll
    static void test4() {
        System.out.println("ddd");
    }

断言

assertEquals / assertNotEquals

通过这两个方法我们可以比较我们要测试的目标和我们所预期的是否一致。

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

    @Test
    void assertTest() {
        driver.get("https://www.baidu.com");
        String test = driver.findElement(By.cssSelector("#su")).getAttribute("value");
        Assertions.assertNotEquals("百度一下",test);
    }

assertTrue / assertFalse

这两个方法用于判断我们里面的布尔值的真假,assertTrue表示当我们里面的值为真的时候测试验证成功,assertFalse则表示当里面的值为false的时候测试验证成功。

    @Test
    void assertTest() {
        driver.get("https://www.baidu.com");
        String test = driver.findElement(By.cssSelector("#su")).getAttribute("value");
        Assertions.assertNotEquals("百度一下",test);
    }

测试的执行顺序

    @Test
    void test1() {
        System.out.println("aaa");
    }
    @Test
    void test222() {
        System.out.println("bbb");
    }
    @Test
    void test3() {
        System.out.println("ccc");
    }
    @Test
    void test4() {
        System.out.println("ddd");
    }

我们看上面这一段的代码,其执行结果如下:

并没有按照从上到下的执行顺序来执行代码当我们想要约定其执行的顺序的时候就需要用到 

@TestMethodOrder(MethodOrderer.OrderAnnotation.class) 来对方法进行一个排序。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TestAuto {
    @Test
    @Order(1)
    void test1() {
        System.out.println("aaa");
    }
    @Test
    @Order(2)
    void test222() {
        System.out.println("bbb");
    }
    @Test
    @Order(3)
    void test3() {
        System.out.println("ccc");
    }
    @Test
    @Order(4)
    void test4() {
        System.out.println("ddd");
    }
}

测试套件Suite

测试套件就是让我们一次性可以执行多个类或者多个包避免我们一个一个类来点击测试,或者把所有的测试都写到一个类中。

添加类

@Suite
@SelectClasses({TestAuto.class})
public class TestAuto2 {

}

 添加包

@Suite
//@SelectClasses({TestAuto.class})
@SelectPackages("com.auto_1_20")
public class runSuite {

}

添加包的时候我们要注意一些细节,我们包里面想要测试的类必须以Test或者tests来结尾并且要加上@Test,并且我们当前的的测试类的类名不能以Test结尾。

参数化

我们前面介绍的方法都是没有参数的,那么如果我们的测试的方法里面如果有参数的话应该怎么怎么办呢,这个时候我们需要对参数进行处理。

单参数

对方法使用 @ParameterizedTest 注解就可以了,要配合 @ValueSource 来找到数据源

    @ParameterizedTest
    @ValueSource(strings = {"zhangsan","lisi","wangwu"})
    void test(String name) {
        System.out.println("name"+name);
    }

多参数

通过 @CsvSource(value = ) 注解来实现,默认分隔符是 逗号。

    @ParameterizedTest
    @CsvSource(value = {"zhangsan,20","lisi,30","wangwu,40"})
    void test1(String name,int age) {
        System.out.println("name"+name+" age"+age);
    }

当我们的数据过多的时候我们可以借助文件来处理。

    @ParameterizedTest
    @CsvFileSource(resources = "/my.csv")
    void test1(String name,int age) {
        System.out.println("name"+name+" age"+age);
    }

动态参数

通过 @MethodSource() 注解来提供参数,也就是我们方法所想要的参数由另外一个方法来提供。

@ParameterizedTest
@MethodSource("test2")
void test1(String x) {
    System.out.println(x);
}
//定义提供数据的方法,可以是 Stream 流
static Stream<String> test2() {
    return Stream.of("张三","李四","王五");
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值