Junit 单元测试框架(简单使用)

本文介绍了JUnit测试框架的关键概念,包括使用@Test注解定义测试方法,@BeforeEach和@AfterEach用于前置和后置操作,@BeforeAll和@AfterAll确保在所有测试前后的执行。还详细讲解了断言如assertEquals、assertTrue等,以及如何控制用例执行顺序。此外,文章还涵盖了测试套件的创建和参数化测试的实现,如单参数、多参数测试和动态参数化。
摘要由CSDN通过智能技术生成

目录

一、注解

1. @Test

2. @BeforeEach 和 @BeforeAll

3. @AfterEach 和 @AfterAll

二、断言

1. Assertions类

1.1 assertEquals 和 assertNotEquals

1.2 assertTrue 和 assertFalse 

1.3 assertNull 和 assertNotNull

三、用例执行顺序

1. 方法的排序 —— @Order

四、测试套件Suit

1. 指定类,添加到套件中并执行

2.  指定包,添加到套件中并执行

 五、参数化

1. 单参数

2. 多参数

2.1 参数为数据

2.2 参数为文件

3. 动态参数

3.1 单参数

3.2 多参数


        Junit 是一个开源的Java语言的单元测试框架。如果说要实现一个灯泡,那么selenium 就是灯泡,而Juniit就是电源。

引入相关依赖:

    <dependencies>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <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-commons</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>
    </dependencies>

一、注解

1. @Test

        表示一个方法/用例。使用Test注解后,就不需要在另外创建类来启动用例了。

    @Test
    public void Test1() {
        //创建driver驱动对象
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver = new ChromeDriver(options);

        driver.get("https://baidu.com");
        driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");
        driver.quit();
    }

当有多个方法时,可以显示出来哪个通过了哪个没有通过。

    @Test
    public void Test1() {
        //创建driver驱动对象
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver = new ChromeDriver(options);

        driver.get("https://baidu.com");
        driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");
        driver.quit();
    }
    @Test
    public void Test2() {
        //创建driver驱动对象
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver = new ChromeDriver(options);

        driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");
    }

 

2. @BeforeEach 和 @BeforeAll

        表示被注解的方法应该在其他方法之前。

@BeforeEach:表示被注解的反复在其他方法之前都要执行一遍;

@BeforeAll:表示被注解的方法在其他方法之前只用执行一遍。(该方法必须加上@Test,同时必须是一个静态方法static)

    @Test
    void Test01() {
        System.out.println("01");
    }
    @Test
    void Test02() {
        System.out.println("02");
    }
    @BeforeEach
    void Test03() {
        System.out.println("03");
    }

    @Test
    void Test01() {
        System.out.println("01");
    }
    @Test
    void Test02() {
        System.out.println("02");
    }
    @BeforeAll
    @Test
    static void Test03() {
        System.out.println("03");
    }

3. @AfterEach 和 @AfterAll

        表示被注解的方法应该在其他方法之后。

@AfterEach:其他的方法执行后,都要执行一遍

@AfterAll:其他所有的方法执行之后只需要执行一遍。(必须是静态方法static)

二、断言

1. Assertions类

1.1 assertEquals 和 assertNotEquals

asserEquals( expect, actual ):校验期望值和实际值是否匹配。

assertNotEquals( expect, sctual ):校验期望值和实际值是否不匹配。

    @Test
    void test1() {
        //创建driver驱动对象
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver = new ChromeDriver(options);

        driver.get("https://baidu.com");
        String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
        Assertions.assertEquals("百度一下",text);
        driver.quit();
    }

1.2 assertTrue 和 assertFalse 

assertTure( 表达式 ):表达式为真则通过。

assertFalse( 表达式 ):表达式为假则通过。

    @Test
    void test2() {
        Assertions.assertTrue(1 == 1);
    }

1.3 assertNull 和 assertNotNull

asserNull(a):a为空则通过。

assertNotNull(a): a不为空则通过。

三、用例执行顺序

        Junit默认的执行顺序是不确定的,但是我们可以使用Junit里提供的方法去规定用例的执行顺序。

注意:

        因为用例之间是存在关联关系的,因此就需要手动的指定用例的顺序。但是在编写测试用例的时候,要保持用例的独立性,避免关联关系的出现。

1. 方法的排序 —— @Order

通过注解

@TestMethodOrder(MethodOrder.OrderAnnotation.class):表示通过方法排序

@Order(i):传入每个方法的顺序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Test03 {
    @Test
    @Order(1)
    void yi() {
        System.out.println("111");
    }
    @Test
    @Order(2)
    void er() {
        System.out.println("222");
    }
    @Test
    @Order(3)
    void san() {
        System.out.println("333");
    }
}

 

四、测试套件Suit

        一个包下有很多个类的用例,要将所有的用例都执行起来就要用到测试套件@Suite。

1. 指定类,添加到套件中并执行

@Suite
//选择指定文件来添加到套件中执行
@SelectClasses({Test03.class, AsserTest.class})
public class RunAllSuite {
}

2.  指定包,添加到套件中并执行

前提:所有的文件都要以Test、tests命名,并且用例都要加上@Test。

@Suite
//选择指定的包添加到套件中执行
@SeleceClasses("test1")
public class RunAllSuite {
}

 五、参数化

@Parameterizedtest 标注方法类型为参数化,同时要搭配参数的来源。不需要再添加@Test注解。否则会再执行一遍。

1. 单参数

@ValueSource( 类型={参数1,参数2,参数3......} )

这里的类型是指原生类型:ints、floats、strings...

    @ParameterizedTest
    @ValueSource(strings = {"丫丫","糯糯","小狗"})
    void test01(String name) {
        System.out.println(name);
    }

 

2. 多参数

2.1 参数为数据

@CsvSource( value = { "丫丫,2" , "糯糯,1" ......} )

默认参数里面使用逗号分隔,也可以使用 delimiterString = “” 来进行设置。

若参数中包含都要,就使用单引号作为转义字符。

    @ParameterizedTest
    @CsvSource(value = {"丫丫,2","糯糯,1"})
    void test02(String name,int i) {
        System.out.println("名字:" + name + "  年龄:" + i);
    }

2.2 参数为文件

当要输入的参数过多,在代码中不美观,就可以使用第三方来进行添加。借助文件注入的方式来添加。

@CsvFileSource( resources = " csv文件 " )

指定的文件路径为当前项目下,resources文件中的 csv文件。

如果要使用本地任意文件夹下的文件:

@CsvFileSource( files = " 文件路径 " )

    @ParameterizedTest
    @CsvFileSource(resources = "/my.csv")
    void test03(String name,int i) {
        System.out.println("名字:" + name + "  年龄:" + i);
    }

3. 动态参数

3.1 单参数

@MethodSources(" ") 参数为数据来源的方法。

注意:参数中的方法必须是静态方法。

@MethodSources

如果参数中为空,就自动找与其同名的静态方法。 

    @ParameterizedTest
    @MethodSource("MethoDemo")
    void test04(String s) {
        System.out.println(s);
    }
//返回值是一个Stream流
    static Stream<String> MethoDemo() {
        return Stream.of("yyy","sss");
    }

3.2 多参数

        使用 Arguments类型。

    @ParameterizedTest
    @MethodSource
    void test05(String name,int i) {
        System.out.println("名字:" + name + "  年龄:" + i);
    }
    static Stream<Arguments> test05() {
        return Stream.of(Arguments.arguments("yaya",22),
                Arguments.arguments("nuonuo",2));
    }

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值