国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

單元測試框架——Junit5

這篇具有很好參考價(jià)值的文章主要介紹了單元測試框架——Junit5。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


Junit

Junit是一個(gè)開源的用于Java語言的單元測試框架,也是Java方向使用最廣泛的單元測試框架。

在pom.xml中引入Junit5相關(guān)依賴

<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:表示一個(gè)方法/用例
  • BeforeEach:表示被注解的方法在其它所有方法執(zhí)行前都要執(zhí)行一遍,也就是說其它方法有3個(gè)它就要執(zhí)行3遍
  • @BeforeAll:表示被注解的方法在其它方法之前執(zhí)行(使用該注解的方法必須定義成static)
  • @AfterEach:表示被注解的方法應(yīng)該在其它方法執(zhí)行后都要執(zhí)行一遍,其它方法有4個(gè)就執(zhí)行4遍
  • @AfterAll:表示被注解的方法在其它方法后執(zhí)行一遍就可以了(使用該注解的方法必須定義成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();
    }
}

前后執(zhí)行代碼

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

運(yùn)行結(jié)果

@BeforeEach
test1
@AfterEach


@BeforeEach
test2
@AfterEach


@BeforeEach
test3
@AfterEach

2.斷言

很多編程語言都有斷言C語言和Java都是有斷言功能的,但斷言一遍是出現(xiàn)在測試階段,如果在生產(chǎn)環(huán)境使用斷言,只要一旦觸發(fā)斷言程序就會(huì)立即終止。

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

  • Assertions.assertEquals(預(yù)期值,實(shí)際值):如果預(yù)期和實(shí)際值不相同就會(huì)觸發(fā)斷言
  • Assertions.assertNotEquals(預(yù)期值,實(shí)際值):如果預(yù)期值和實(shí)際值匹配就會(huì)觸發(fā)斷言
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():如果括號里的表達(dá)式值為False就會(huì)觸發(fā)斷言
  • Assertions.assertFalse():如果括號里的表達(dá)式值為True就會(huì)觸發(fā)斷言
  • Assertions.assertNull():如果括號里的表達(dá)式的值不為null就會(huì)觸發(fā)斷言
  • Assertions.assertNotNull():如果括號里的表達(dá)式的值為null就會(huì)觸發(fā)斷言

3.測試用例執(zhí)行順序

Junit的默認(rèn)執(zhí)行順序是不確定的,官網(wǎng)文檔中也沒有給出明確的執(zhí)行順序。但我們可以使用Junit里提供的方法來手動(dòng)設(shè)置用例的執(zhí)行順序,文檔中給出了很多的排序方法。

這里介紹方法的排序,通過@order注解來排序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//標(biāo)注當(dāng)前類使用方法來進(jìn)行排序
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");
    }
}

運(yùn)行結(jié)果

ccc


bbb


aaa

4.測試套件Suite

1) 指定多個(gè)類

通過測試套件可以將多個(gè)類的測試用例一起執(zhí)行,通過@Suite@SelectClasses注解配合實(shí)現(xiàn)

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

單元測試框架——Junit5

運(yùn)行結(jié)果

單元測試框架——Junit5

2) 指定包

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

這里指定的是junit包下的Test命名的類

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

單元測試框架——Junit5

5. 參數(shù)化

有的時(shí)候我們的測試方法需要傳遞參數(shù),而有多個(gè)參數(shù)寫多個(gè)方法又比較麻煩,所以需要使用Junit的參數(shù)化。通過@ParameterizedTest注解標(biāo)注類型參數(shù)化。

1) 單參數(shù)

單參數(shù)通過@ValueSource注解來實(shí)現(xiàn),@ValueSource(類型={參數(shù)1,參數(shù)2,…})

@ValueSource中支持的類型有:

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

在對應(yīng)的類型使用后面+s使用

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

運(yùn)行結(jié)果

name:張三

name:李四

name:王五

2) 多參數(shù)

多參數(shù)使用@CsvSource注解,@CsvSource(value={“張三,18”,“李四,20”,…})

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

運(yùn)行結(jié)果

name:張三

name:李四

name:王五

多參數(shù)可以指定分割符,通過delimiterString屬性設(shè)置

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

如果參數(shù)里包含逗號就要使用單引號做轉(zhuǎn)義字符

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

3) 文件注入

如果參數(shù)非常多,在代碼中編寫不太友好,就可以借助文件注入的方式來添加,通過@CsvFileSource來指定

指定讀取resources目錄

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

test.txt文件內(nèi)容

張三 18
李四 20
王五 25
趙六 30

指定讀取本機(jī)文件

@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.動(dòng)態(tài)參數(shù)

單參數(shù)

通過@MethodSource指定方法的返回值為動(dòng)態(tài)參數(shù),返回值可以是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;
    }
}

多參數(shù)

使用Arguments可以實(shí)現(xiàn)多參數(shù)文章來源地址http://www.zghlxwxcb.cn/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));
    }
}

到了這里,關(guān)于單元測試框架——Junit5的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Junit5+Mockito單元測試詳解

    Junit5+Mockito單元測試詳解

    1.宏觀層面:AIR原則 A:Automatic(自動(dòng)化) 全自動(dòng)執(zhí)行,輸出結(jié)果無需人工檢查,而是通過斷言驗(yàn)證。 I:Independent(獨(dú)立性) 分層測試,各層之間不相互依賴。 R:Repeatable(可重復(fù)) 可重復(fù)執(zhí)行,不受外部環(huán)境( 網(wǎng)絡(luò)、服務(wù)、中間件等)影響。 2.微觀層面:BCDE原則 B: Bord

    2024年01月17日
    瀏覽(33)
  • 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 現(xiàn)在版本: @SpringBootTest class Boot05WebAdminApplicationTests { @Test void contextLoads() { } } 以前: @SpringBootTest + @RunWith(SpringRunner.class) SpringBoot整合Junit以后。 編寫測試方法:@Test標(biāo)注(注意需要

    2024年04月29日
    瀏覽(18)
  • 13.Springboot整合junit5單元測試與生成單元測試覆蓋率

    13.Springboot整合junit5單元測試與生成單元測試覆蓋率

    現(xiàn)在基本大公司都要求單元測試了,保證我們代碼得質(zhì)量,而我司更是要求覆蓋率要達(dá)到60%以上,所以搞一下。 這里有兩個(gè)方法: 1.使用maven自帶得test,idea右側(cè)maven模塊執(zhí)行項(xiàng)目下得test 2.使用cmd命令,在你的項(xiàng)目pom文件所在目錄 ,打開cmd,執(zhí)行如下: 結(jié)果如下:打開site文

    2024年02月16日
    瀏覽(23)
  • 靜態(tài)方法 單元測試 springboot+mokito+junit5

    CodecUtils的方法是靜態(tài)類,使用@InjectMocks不能有用,因?yàn)檫@個(gè)注解只能用于非靜態(tài)的對象。 想要為靜態(tài)方法寫單元測試,可以使用Mockito.mockStatic(Class classToMock)方法,它可以返回一個(gè)MockedStatic對象,用于模擬靜態(tài)方法的調(diào)用。 1.導(dǎo)入依賴 2.單元測試 可以參考如下地址,了解如何

    2024年04月25日
    瀏覽(21)
  • 單元測試junit(原始版本、Spring Boot各版本、junit5)使用介紹

    單元測試junit(原始版本、Spring Boot各版本、junit5)使用介紹

    ?? 簡介:java系列技術(shù)分享(??持續(xù)更新中…??) ?? 初衷:一起學(xué)習(xí)、一起進(jìn)步、堅(jiān)持不懈 ?? 如果文章內(nèi)容有誤與您的想法不一致,歡迎大家在評論區(qū)指正?? ?? 希望這篇文章對你有所幫助,歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? ?? 更多文章請點(diǎn)擊 單元測試 junit各版本 使用介紹 官

    2023年04月16日
    瀏覽(32)
  • 深度揭秘JUnit5與Mockito的單元測試神秘面紗

    深度揭秘JUnit5與Mockito的單元測試神秘面紗

    在今天的學(xué)習(xí)中,我們將深入研究 JUnit 和Mockito,這是 Java 開發(fā)中最強(qiáng)大的 單元測試 工具之一。通過學(xué)習(xí)如何編寫清晰、高效的單元測試,我們將揭開單元測試的神秘面紗,助力你在項(xiàng)目中寫出更健壯的代碼。 提示: 今天的代碼是在第九天代碼的基礎(chǔ)上進(jìn)行開發(fā),我們將為

    2024年02月02日
    瀏覽(33)
  • SpringBoot 實(shí)戰(zhàn):JUnit5+MockMvc+Mockito 做好單元測試

    SpringBoot 實(shí)戰(zhàn):JUnit5+MockMvc+Mockito 做好單元測試

    因?yàn)槔^承了 spring-boot-starter-parent ,所以我們依賴的 spring-boot-starter-test 不需要寫具體的版本,可以直接集成父級的版本定義。其中, spring-boot-starter-web 是用于提供 REST API 的 web 容器, spring-boot-starter-test 可以提供各種測試框架的, spring-boot-maven-plugin 是將 SpringBoot 應(yīng)用打包為

    2024年04月15日
    瀏覽(28)
  • 在 Java 中使用JUnit5進(jìn)行單元測試和自動(dòng)化測試

    單元測試和自動(dòng)化測試是現(xiàn)代軟件開發(fā)過程中必不可少的環(huán)節(jié),可以提高代碼質(zhì)量和開發(fā)效率。JUnit5是Java中流行的單元測試框架,本文將介紹如何在Java中使用JUnit5進(jìn)行單元測試和自動(dòng)化測試。 2.1 單元測試的基本概念和原理 單元測試是一種測試方法,用于對軟件系統(tǒng)中的最

    2024年02月03日
    瀏覽(23)
  • Spring Cloud中Controller單元測試 Junit5 & MockMvc

    在Spring Cloud中進(jìn)行Controller的單元測試,使用Junit5和Mock。 Controller: 方式一:使用@SpringBootTest + @AutoConfigureMockMvc 方式二:使用@WebMvcTest + @ImportAutoConfiguration(RefreshAutoConfiguration.class) 解決 No Scope registered for scope name \\\'refresh\\\' 異常 注入Mockmvc方式有兩種 方式一:(@AutoConfigureMockMvc / @

    2024年02月16日
    瀏覽(21)
  • 如何在 Java 中使用JUnit5進(jìn)行單元測試和自動(dòng)化測試

    單元測試和自動(dòng)化測試是現(xiàn)代軟件開發(fā)過程中必不可少的環(huán)節(jié),可以提高代碼質(zhì)量和開發(fā)效率。JUnit5是Java中流行的單元測試框架,本文將介紹如何在Java中使用JUnit5進(jìn)行單元測試和自動(dòng)化測試。 單元測試是一種測試方法,用于對軟件系統(tǒng)中的最小可測試單元進(jìn)行測試。這些單

    2024年02月05日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包