我在这里有一个条件,就像下面的类及其@Test方法一样:
class myClass{
@Test
public void test1(){..}
@Test
public void test2(){..}
@Test
public void test3(enabled=false){..}
}
当上面的@Tests(test1或test2)中的任何一个失败时,我想在这里执行@Test test3。
问题是测试结果,我的意思是结果(通过或失败)。不是他们返回的值。
答案 0 :(得分:1)
您需要在此处使用dependsOnMethods
。因此,当测试1和测试2都通过时,仅测试3将被执行。
您可以像这样使用它:
@Test(dependsOnMethods={"test1", "test2"})
public void test3{...}
如果您想在前两个失败时运行第三个测试用例,那么当您不希望运行测试用例时,可以将SkipException
放在beforeMethod
中。
您可以采用全局布尔值,然后根据测试用例的通过/失败条件进行设置。
boolean condition = true;
// Execute before each test is run
@BeforeMethod
public void before(Method methodName){
// check condition, note once you condition is met the rest of the tests will be skipped as well
if(condition){
throw new SkipException();
}
}
答案 1 :(得分:1)
可以通过布尔变量并抛出SkipException
来完成,这将制止所有后续测试的执行:
class myClass{
// skip variable
boolean skipCondition;
// Execute before each test is run
@BeforeMethod
public void before(Method methodName){
// condition befor execute
if(skipCondition)
throw new SkipException();
}
@Test(priority = 1)
public void test1(){..}
@Test(priority = 2)
public void test2(){..}
@Test(priority = 3)
public void test3(){..}
}
另一件事是实现IAnnotationTransformer
,更加复杂。
public class ConditionalTransformer implements IAnnotationTransformer {
// calls before EVERY test
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod){
// add skip ckeck
if (skipCkeck){
annotation.setEnabled(false);
}
}
}