我们有多个测试用例,可以将数据加载到缓存中并运行测试用例。测试用例运行正常,但是当我们运行所有测试用例时,由于每次为每个测试用例加载缓存需要大量时间。有没有办法加载缓存一次,然后在所有测试用例中使用缓存。
这样做的一种方法是将所有测试用例放在一个类中,但是它会失败,因为结果很难分析(每个类中有大约5-10个测试方法,因此大约有30个测试类生成的报告将非常大并且没有组织。 我尝试使用测试套件,但是在每个测试用例之后缓存都会关闭,因为它逐个运行它们。
答案 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方法会导致 它在类
中的任何测试方法之前运行一次
您可以在超类中使用它,后续子类可以简化您的代码/测试组织。