【问题标题】:Adding a setUp step for multiple JUnit test classes为多个 JUnit 测试类添加设置步骤
【发布时间】:2013-08-29 22:03:19
【问题描述】:

在一个项目中有多个测试类,每个测试类都包含多个测试方法。比如说,我想在运行每个测试类之前创建一个数据库连接。无论我是运行单个测试类、多个测试类还是测试套件,都应该建立连接。 最重要的是,在有多个测试类的情况下,不应一遍又一遍地调用此步骤。无论我正在运行多少测试类,都应该只建立一次连接。

您能否提出解决此问题的设计或任何 JUnit 技巧?

【问题讨论】:

    标签: java unit-testing junit junit4 junit-runner


    【解决方案1】:

    您可以在测试套件中运行这些类。请参阅this question 和提供的答案。

    或者更改您的设计并使用@BeforeClass 注释在每个测试类之前运行一次设置。

    有时需要多个测试共享计算成本高昂的设置 (例如登录数据库)。虽然这可能会损害 测试的独立性,有时是必要的优化。 使用 @BeforeClass 注释公共静态 void 无参数方法会导致 它在类中的任何测试方法之前运行一次。这 超类的@BeforeClass 方法将在那些 当前班级。

    【讨论】:

    • @BeforeClass 听起来像是一个解决方案。但是我在我的 SuperTestClass 中使用了一个静态初始化程序来实现这一点,并且正在检查是否有任何非静态解决方案。如果我没记错的话,“BeforeClass”基本上是一样的。
    【解决方案2】:

    使用@BeforeJunit注解

    在编写测试时,通常会发现需要几个测试 在它们可以运行之前创建的类似对象。注释公共空白 带有@Before 的方法会导致该方法在测试之前运行 方法。超类的 @Before 方法将在这些方法之前运行 当前班级的。

    只需为所有 junit 类引入一个超类。您可以将数据库连接逻辑放在您的超类 @Before 注释方法中。

    【讨论】:

    • 我不确定这是否回答了我问题的最后一部分。如果我的测试套件有多个测试类,带有 @Before 注释的超类方法将运行多次。
    【解决方案3】:

    如果您使用的是 spring-test,那么您可以使用此处采用的技术:How to load DBUnit test data once per case with Spring Test

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多