0

我们有多个测试用例,它们将数据加载到缓存中并运行测试用例。测试用例运行良好,但是当我们运行所有测试用例时,它会花费大量时间,因为每次测试用例都会加载缓存。是否有以任何方式加载缓存一次,然后在所有测试用例中使用缓存。

一种方法是将所有测试用例放在一个类中,但这违背了目的,因为结果将难以分析(每个类大约有 5-10 个测试方法,大约有 30 个测试类,所以报告生成的将非常大并且没有组织)。我尝试使用测试套件,但是缓存在每个测试用例之后都会关闭,因为它会一个一个地运行它们。

4

3 回答 3

6

您可以创建抽象类作为所有测试用例的基类。缓存应初始化为此类并存储在其静态成员中。那么所有的测试都应该使用这个缓存。

替代解决方案是实现将管理缓存的自定义测试运行器。然后,您必须使用注释标记所有需要缓存@RunWith的测试用例并在那里传递测试运行器类。

于 2013-05-21T08:38:57.543 回答
1

创建一个测试套件,其中包含初始化缓存的@BeforeClass 方法,然后在其中添加所有测试用例。这也允许在之后轻松添加更多测试类。如果这很重要,请记住将它们按正确的顺序排列。顶级套件类首先运行。

@RunWith(Suite.class)
@Suite.SuiteClasses({
TestClass1.class,
TestClass2.class
)}
public class TestSuiteClass {
    @BeforeClass
   public void initCache() {
       //Your init code here.
   }
}

一些有用的链接: http : //junit.sourceforge.net/javadoc/org/junit/runner/RunWith.html http://junit.org/javadoc/4.9/org/junit/runners/Suite.SuiteClasses.html

稍微更全面的例子:http ://www.tutorialspoint.com/junit/junit_suite_test.htm

于 2013-05-21T08:48:41.113 回答
0

我原以为@BeforeClass会满足您的需求。

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

您可以在超类中使用它,随后的子类可以简化您的代码/测试组织。

于 2013-05-21T08:36:52.567 回答