gpt4 book ai didi

java - 如果其他测试失败,我可以跳过 Junit 测试吗?

转载 作者:行者123 更新时间:2023-12-05 04:16:39 25 4
gpt4 key购买 nike

我正在使用 Junit 通过 Seleniun WebDriver 运行测试。我正在尝试将我的测试拆分为功能区域,以便更好地报告错误。我已经创建测试来测试页面加载/将文档移动到其他工作流程。如果页面加载测试失败,或者工作流移动失败,我想跳过后续的页面/工作流测试。

如果测试 A 失败,我该如何跳过类(class)中的其余测试或在类(class) B 中运行测试?

注意:我意识到我要问的是“UNIT TESTS 的错误做法*”。但是,我实际上是将 Junit 用于集成 和/或自动化> 测试。(取决于您的定义。)我已经找到 @Suite.SuiteClasses@FixMethodOrder 来订购我的测试类和测试方法。我试图命令它们按逻辑运行,首先测试页面加载,然后将页面的每个功能作为单独的测试。一些功能,将信息移动到其他页面,即其他类。我的一门课可能需要超过 1/2 小时才能完成。如果先决条件测试失败,我想缩短“依赖”测试,以便更快获得结果/报告。

最佳答案

通过使用 Junit's Assume在 @Before 或 @Test 方法中,您可以使用

跳过当前测试
  1. Assume#assumeTrue(boolean)对于任何失败的依赖测试。您可以通过调用 Assume.assumeTrue(false) 跳过当前测试
  2. Assume#assumeNoException(Throwable)对于可跳过的测试并通过传递 AssumptionVoilated 跳过当前测试跳过其他测试时出现异常。

这是一个例子:

public class Tests{
@Test
public void test1(){
...
}

@Test
public void test2(){
try{
test1();
}catch(AssertionError failExcep){
//test1 failed, skip this test
Assume.assumeTrue(false);
}catch(AssumptionVoilationException skipExcep){
//test1 was skipped, skip this test
Assume.assumeNoException(skipExcep);
}
...
}
}

此特定示例将运行 test1() 两次,但通过添加 @FixMethodOrder 并捕获在 test1 期间抛出的任何错误以在 test2 中引用;我们可以规避这个问题。

此外,此示例不涵盖 test1() 可能抛出的任何其他异常类型,例如空指针异常。将 AssumptionVoilationException catch 子句编辑为 Exception 将允许在遇到任何异常时跳过 test2。如果您还想捕获 Error 或 Throwable,只需添加一个 catch 子句并像 AssertionError 一样放入 Assume.assumeTrue(false)。或者你可以直接扔 AssumptionViolatedException

这是虚拟证明版本

@FixMethodOrder
public class Tests{

private Optional<Throwable> testOneThrown;

@Test
public void test1(){
try{
...
}catch(Throwable t){
// test1 throw something, catching it for test2() reference
testOneThrown = Optional.of(t);
/*
* still throwing it for junit normal functions and
* in case test2 ran independently
*/
throw t;
}
//Ran successfully, making reference non-null but empty
testOneThrown = Optional.empty();
}

@Test
public void test2(){
try{
if(testOneThrown == null){
// test1 did not run, thus needs to run
test1();
}else if(testOneThrown.isPresent()){
// test1 ran and threw something
throw testOneThrown.get();
}
//test1 ran and throw nothing
}catch(Throwable thrown){
/*
* something was throw in test1, test1 could have
* failed, could have been skipped, etc. thus skip
* this test.
*/
throw new AssumptionViolatedException("Dependency on test1 failed.", thrown);
}
...
}
}

关于java - 如果其他测试失败,我可以跳过 Junit 测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514862/

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