0


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

    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));
    }

标签: junit 单元测试 java

本文转载自: https://blog.csdn.net/weixin_60358891/article/details/130666771
版权归原作者 AJIUZ 所有, 如有侵权,请联系我们删除。

“Junit 单元测试框架(简单使用)”的评论:

还没有评论