亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

跳過 @beforeMethod 中 testMethod 的執行,而不是全部跳過剩余的

跳過 @beforeMethod 中 testMethod 的執行,而不是全部跳過剩余的

胡說叔叔 2023-09-27 16:36:13
我有一個項目,在每個 @Test 方法之前,我都會檢查該方法的注釋數據是否有效。如果數據無效,我想跳過測試方法并繼續測試套件的其余部分。所有數據解析和邏輯都工作正常,但據我所知,我使用了錯誤的工具來完成這項工作。我的代碼有...private SoftAssert s_assert = new SoftAssert();@BeforeMethodpublic void beforeMethod(Method m){     //reads code     if (dataNotCorrect)          s_assert.fail();}@Test @MyCustomAnnotation(data = incorrect)public void Test1(){     //Do stuff}@Test @MyCustomAnnotation(data = correct)public void Test2(){     //Do stuff}在這種情況下,我想開始嘗試同時執行這兩個操作,但是當測試運行時 Test1() 應該被跳過,而 testng 應該繼續運行 Test2()。然而,一旦我在 Test1() 處發現失敗,它就會在 Test1() 處結束整個套件。不僅跳過 Test1(),還跳過 Test2()。我已經嘗試過軟斷言和普通斷言,但似乎都不起作用。
查看完整描述

3 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

我希望跳過當前測試而不是所有剩余測試的問題仍然存在。


結果發現問題出在 Testng 中的 configfailurepolicy 上。當我希望將其設置為繼續(繼續套件的其余部分)時,它默認為跳過(跳過所有剩余的測試)。


這是我在其他地方找到的答案,我設法以兩種不同的方式應用它。鏈接在這里


1. 首先,創建一個 testng.xml 并從那里運行測試。在套件名稱旁邊,添加標簽 configfailurepolicy="continue" 這是我的 testng.xml 下面


<?xml version="1.0" encoding="UTF-8"?>

<suite name="Suite" configfailurepolicy="continue">

    <test name="MyTests" preserve-order="true">

        <classes>

            <class name="testclassLocation..." />

        </classes>

    </test>

</suite>

如果您這樣做,請確保從 testng.xml 運行測試。


2. 找到 testng 的 .jar 所在位置。我使用的是maven,所以它是“${user.dir}.m2\repository\org\testng\testng\6.14.3”。


然后打開 .jar 存檔,查看文件“testng-1.0.dtd”,找到該行


configfailurepolicy (skip | continue) "skip"

并將其更改為


configfailurepolicy (skip | continue) "continue"

之后應該可以正常工作。


編輯:正如評論中提到的,建議使用第一個解決方案,因為它允許這些更改/修復可以跨多個項目/設備移植。第二種解決方案只會將修復應用于您的計算機。


查看完整回答
反對 回復 2023-09-27
?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

SkipException就是您正在尋找的。

在 中beforeMethod,檢查您的數據,SkipException如果不正確則拋出。這將跳過測試。在這個完整而簡單的示例中,test2跳過:

import org.testng.SkipException;

import org.testng.annotations.BeforeMethod;

import org.testng.annotations.Test;


import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.reflect.Method;


public class TestA {


? ? @Retention(RetentionPolicy.RUNTIME)

? ? public @interface MyCustomAnnotation {

? ? ? ? boolean dataCorrect();

? ? }


? ? @BeforeMethod

? ? public void beforeMethod(Method m) {

? ? ? ? if (!m.getAnnotation(MyCustomAnnotation.class).dataCorrect()) {

? ? ? ? ? ? throw new SkipException("Invalid data");

? ? ? ? }

? ? }


? ? @Test

? ? @MyCustomAnnotation(dataCorrect = true)

? ? public void test1() {

? ? ? ? System.out.println("test1");

? ? }


? ? @Test

? ? @MyCustomAnnotation(dataCorrect = false)

? ? public void test2() {

? ? ? ? System.out.println("test2");

? ? }

}

您還需要更改默認配置失敗策略,以便即使跳過一個測試也可以運行其他測試。這是在套件級別完成的:


<?xml version="1.0" encoding="UTF-8"?>

<suite name="Suite" configfailurepolicy="continue">

...

</suite>

感謝@Kyle OP指出這個屬性。


查看完整回答
反對 回復 2023-09-27
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

在BeforeMethod中創建一個靜態Booleanflag,如果數據不正確,則只需將標志更改為true,然后在布爾為true的測試中首先將標志更改為false并失敗測試


示例代碼


public static Boolean myflag=false;


@BeforeMethod

public void beforeMethod(Method m){

     //reads code

     if (dataNotCorrect)

          myflag=true;

}


@Test @MyCustomAnnotation(data = incorrect)

public void Test1(){

     if(myflag){

       myflag=false;

       s_assert.fail();

}


查看完整回答
反對 回復 2023-09-27
  • 3 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號