当前位置: 首页 > 知识库问答 >
问题:

JUnit 4如何在测试套件中初始化并将其传递给测试类

汪鸿波
2023-03-14


Junit4中是否有方法将一些预初始化的数据(如http连接)传递给所有子(即套件)测试类,这些数据是使用带有“@RunWith(Suite.class)”注释的类中的“@ClassRule”初始化的?还有,如何确保套件中的类不能单独运行?

例如

class A {
    private HttpClient client;
    @Test
    public void someTest() {
        client.execute(...);
        ...
    }
 }

 @RunWith(Suite.class)
 @Suite.SuiteClasses({A.class})
 public class Suite {
     private static HttpClient client;
     @ClassRule
     public static ExternalResource resource= new ExternalResource() {
         @Override
         protected void before() throws Throwable {
             client = new DefaultHttpClient();
         } 
     }

谢谢,

帕迪

共有2个答案

金伟
2023-03-14

当您使用JUnit的开箱即用的Runner时,您将获得从测试Suite到其子测试的任何访问权限。测试类的实例化是在框架内部完成的。

如果您想将信息/状态从一个测试传递到另一个测试,我想实现某种“上下文”。E、 g.一个具有静态Getter和Setter的单件,用于上下文,允许套件存储对象,并在以后的测试中读取。

岳风畔
2023-03-14

我认为用JUnit无法做到这一点。

我看到的唯一可能性是使用一个抽象类并在每个测试类中继承该类。

public abstract class AbstractTest {
  @ClassRule
  public static ExternalResource resource= new ExternalResource() {
    //...
  }
}

public class MyTest extends AbstractTest {
}

还有如何确保套件中的类不能单独运行?

我认为那也不可能。

但你为什么要这样?修复一个失败的测试后,是否确实要重新运行所有测试以检查一个测试是否正常工作?(当然,修复可能会带来副作用,但当您知道修复测试正在运行时,可以重新运行所有测试。)此外,测试应该能够独立运行。

 类似资料:
  • 主要内容:1 概述,2 创建简单的Maven项目,3 项目包装结构,4 更新pom.xml文件中的JUnit依赖关系,5 创建LoginService.java和LoginServiceTest.java,,6.创建UserService.java和UserServiceTest.java,7 创建测试套件,8 结论1 概述 在本指南中,我们将学习如何一次运行多个测试类。将Suite用作运行程序可以使您手动构建一个包含许多类测试的套件。它等效于JUnit 3.8.x静态Test suite()方

  • 我有两个TestSuite类(和) 他们看起来是这样的: 如何并行运行它们?我运行一个这样的测试$mvn class test-Dtest=TestSuiteOne 但我如何同时运行它们呢?

  • 主要内容:1 参数化测试的介绍,2 使用@Parameter进行字段注入而不是构造函数,3 使用单个参数进行测试,4 识别单个测试用例1 参数化测试的介绍 自定义流道参数化实现参数化测试。运行参数化测试类时,将为测试方法和测试数据元素的叉积创建实例。 例如,要测试斐波那契函数,请编写: FibonacciTest的每个实例都将使用二元参数构造函数和方法中的数据值构造 @Parameters 。 2 使用@Parameter进行字段注入而不是构造函数 也可以将数据值直接注入字段中,而无需使用@Pa

  • 在将一些测试从JUnit迁移到TestNG时,我遇到了一个问题,因为这些测试框架处理它们的测试类实例的方式不同。 JUnit为每个测试方法创建一个新的测试类实例。所以我看到的一个常见模式是: 相比之下,TestNG对所有测试方法使用测试类的单个实例。所以上面的模式行不通!因为数据存储在实例字段中,所以值不再是孤立的。如果启用了并行执行,这可能会导致在测试中覆盖数据。 那么我该如何使用TestNG呢

  • 在JUnit 4中,通过使用注释很容易跨一堆类测试不变量。关键是一组测试正在针对单个参数列表运行。 如何在JUnit 5中复制这一点,而不使用JUnit-vintage? 不适用于测试类。听起来可能是合适的,但该注释的目标也是一个方法。 此类 JUnit 4 测试的一个示例是:

  • 问题内容: 在JUnit4中可以吗? 在JUnit3中,我将执行以下操作: 问题答案: takari-cpsuite(最初由Johannes Link 开发)提供了一个适合您需求的classpath- suite。它允许通过正则表达式对Classpath中的类进行过滤,例如: