gpt4 book ai didi

java - 测试。跳过 @beforeMethod 中 testMethod 的执行,而不是全部跳过剩余的 testMethods

转载 作者:行者123 更新时间:2023-11-30 01:45:18 25 4
gpt4 key购买 nike

我有一个项目,在每个 @Test 方法之前我都会检查该方法的注释数据是否有效。如果数据无效,我想跳过测试方法并继续测试套件的其余部分。

所有数据解析和逻辑都工作正常,但据我所知,我使用了错误的工具来完成这项工作。

我的代码有...


private SoftAssert s_assert = new SoftAssert();

@BeforeMethod
public 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()。

我尝试了软断言和普通断言,但似乎都不起作用。

最佳答案

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

另请参阅:How do I use TestNG SkipException?

您还需要更改默认配置失败策略,以便即使跳过一个测试也可以运行其他测试。这是在套件级别完成的:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" configfailurepolicy="continue">
...
</suite>

感谢@Kyle OP指出这个属性。

关于java - 测试。跳过 @beforeMethod 中 testMethod 的执行,而不是全部跳过剩余的 testMethods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58264087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com