在所有junit测试用例中重用缓存

时间:2013-05-21 08:34:04

标签: java junit

我们有多个测试用例,可以将数据加载到缓存中并运行测试用例。测试用例运行正常,但是当我们运行所有测试用例时,由于每次为每个测试用例加载缓存需要大量时间。有没有办法加载缓存一次,然后在所有测试用例中使用缓存。

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

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

创建一个Test Suite,其中包含初始化Cache的@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

答案 2 :(得分:0)

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

  

有时,多个测试需要共享计算成本高昂的设置   (比如登录数据库)。虽然这可以妥协   测试的独立性,有时候是必要的优化。   使用@BeforeClass注释public static void no-arg方法会导致   它在类

中的任何测试方法之前运行一次

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