第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 JUnit 5 的 @ParametrizedTest 而不是

使用 JUnit 5 的 @ParametrizedTest 而不是

阿晨1998 2022-07-14 16:33:14
首先,在 Junit 5 動(dòng)態(tài)測試指南的結(jié)論中,它們是什么意思?參數(shù)化測試可以替代本文中的許多示例。但是,動(dòng)態(tài)測試與參數(shù)化測試不同,因?yàn)樗鼈冎С滞暾臏y試生命周期,而參數(shù)化測試不支持。我瀏覽了JUnit 5 – Parameterized Tests并相信我理解了句法層面的差異,并且相信我明白了這一點(diǎn):此外,動(dòng)態(tài)測試在如何生成輸入以及如何執(zhí)行測試方面提供了更大的靈活性。但是看起來,為什么有人更喜歡參數(shù)化測試而不是動(dòng)態(tài)測試?
查看完整描述

2 回答

?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊

動(dòng)態(tài)測試,我將它們稱為 testlets,只是軟/分組斷言(assertAll(...))。您將在報(bào)告中看到每個(gè)生成的動(dòng)態(tài)測試的條目,但它們不是真正的測試。

您復(fù)制到問題中的引用(來自 baeldung)是錯(cuò)誤的。它應(yīng)該在 JUnit 的用戶指南中閱讀:

動(dòng)態(tài)測試生命周期

@Test動(dòng)態(tài)測試的執(zhí)行生命周期與標(biāo)準(zhǔn)案例的執(zhí)行生命周期完全不同。具體來說,單個(gè)動(dòng)態(tài)測試沒有生命周期回調(diào)。這意味著@BeforeEach@AfterEach方法及其相應(yīng)的擴(kuò)展回調(diào)是針對@TestFactory方法執(zhí)行的,而不是針對每個(gè)動(dòng)態(tài)測試執(zhí)行的。

有關(guān)更多詳細(xì)信息,請閱讀:https ://junit.org/junit5/docs/current/user-guide/#writing-tests-dynamic-tests

為什么有人更喜歡參數(shù)化測試而不是動(dòng)態(tài)測試?

  1. 如果您需要為每個(gè)測試(模板調(diào)用)提供完整的生命周期支持。

  2. 如果你想在注釋中聲明你的參數(shù)。

在此處找到有關(guān)如何以各種形式向 a 提供參數(shù)的更多詳細(xì)信息@ParameterizedTesthttps ://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests - 請注意“類/容器模板”計(jì)劃在以后發(fā)布:https ://github.com/junit-team/junit5/issues/878

我在這里寫了一篇博客文章,比較了用 JUnit Jupiter 分散 3 個(gè)斷言的 5 個(gè)步驟:https ://sormuras.github.io/blog/2018-05-14-junit5-scatter-assertions.html

http://img1.sycdn.imooc.com//62cfd59b000163fc03750323.jpg

查看完整回答
反對 回復(fù) 2022-07-14
?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

更大的靈活性在某種程度上意味著編寫起來更加復(fù)雜和樣板,尤其是在大多數(shù)情況下,測試用例是相當(dāng)靜態(tài)的,但不是那么動(dòng)態(tài)的。


考慮我想測試Math.add():


參數(shù)化測試版本如下所示:


@ParameterizedTest

@CsvSource({ "1,1,2",

            "2,2,4",

            "3,3,6",

            "4,4,8",

            "5,5,10",

            "6,6,12",

            "7,7,14",

            "10,90,100" })

public void parameterizedTest(int left, int right, int expected) {

    assertEquals(expected, Math.addExact(left, right));

}

動(dòng)態(tài)測試版本如下:


@TestFactory

Collection<DynamicTest> dynamicTest() {

    return Arrays.asList(

      DynamicTest.dynamicTest("Test1", () -> assertEquals(2, Math.addExact(1, 1))),

      DynamicTest.dynamicTest("Test2", () -> assertEquals(4, Math.addExact(2, 2))),

      DynamicTest.dynamicTest("Test3", () -> assertEquals(6, Math.addExact(3, 3))),

      DynamicTest.dynamicTest("Test4", () -> assertEquals(8, Math.addExact(4, 4))),

      DynamicTest.dynamicTest("Test5", () -> assertEquals(10, Math.addExact(5, 5))),

      DynamicTest.dynamicTest("Test6", () -> assertEquals(12, Math.addExact(6, 6))),

      DynamicTest.dynamicTest("Test7", () -> assertEquals(14, Math.addExact(7, 7))),

      DynamicTest.dynamicTest("Test8", () -> assertEquals(100, Math.addExact(10, 90))));

}

它已經(jīng)有許多樣板代碼。所以我嘗試使用 returnStream<DynamicTest>刪除這些樣板代碼:


@TestFactory

Stream<DynamicTest> dynamicTest2() {


    return Stream.of(

                "1,1,2", 

                "2,2,4", 

                "3,3,6",

                "4,4,8" ,

                "5,5,10" , 

                "6,6,12" ,

                "7,7,14", 

                "10,90,100")

                //How to do????????

            .map(data-> DynamicTest.dynamicTest(data, () -> assertEquals(xxx, Math.addExact(yy,zz))));

}

但是如何將字符串格式的測試數(shù)據(jù)轉(zhuǎn)換為參數(shù)并調(diào)用 SUT。我環(huán)顧DynamicTestAPI 看看是否有什么可以幫助我但找不到任何有用的東西,所以我放棄了.....


所以,我更喜歡參數(shù)化測試。更優(yōu)雅、干凈、易讀易寫。測試用例的可讀性更為重要。


查看完整回答
反對 回復(fù) 2022-07-14
  • 2 回答
  • 0 關(guān)注
  • 168 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號