2013-08-27 33 views
5

在一个项目中有多个测试类,每个测试类包含多个测试方法。假设我想在运行这些测试类之前创建一个数据库连接。无论我是否运行单独的测试类,多个测试类或测试套件,都应该进行连接。 最重要的是,这个步骤不应该一次又一次地在多个测试类中调用。无论我正在运行多少个测试类,连接都应该只进行一次。为多个JUnit测试类添加setUp步骤

你能提出一个设计或任何JUnit提示来解决这个问题吗?

回答

0

使用@Before Junit的注释

在编写测试,是很常见的发现,几个测试需要 类似的对象创建才可以运行。使用@Before注释公共空白 方法会导致该方法在测试 方法之前运行。超类的@Before方法将在当前类的 之前运行。

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

+1

我不知道这是否回答我的问题的最后一部分。如果我的测试套件有多个测试类,则带有@Before注释的超类方法将运行多次。 – rclakmal

3

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

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

有时几个测试需要共享计算昂贵的设置 (如登录到数据库)。虽然这可能会影响测试的独立性,但有时候这是一种必要的优化。 使用@BeforeClass注释公共静态void no-arg方法会导致 它会在类中的任何测试方法之前运行一次。超类的@BeforeClass方法将在当前类的 之前运行。

+0

@BeforeClass听起来像一个解决方案。但我在我的SuperTestClass中使用静态初始化器来实现这一点,并检查是否有任何非静态解决方案。如果我没有错,'BeforeClass'基本上是一样的。 – rclakmal