我在这个问题上遇到了同样的问题:
How to populate database only once before @Test methods in spring test?
但是这个解决方案对我来说是不可接受的,因为它会为我的所有测试类运行相同的脚本。 我想要的是只为每个测试类运行一次不同的脚本。 到目前为止,我找到的唯一解决方案是在@Before方法中添加一个if
答案 0 :(得分:1)
除非您愿意为每个测试加载(并缓存)不同的ApplicationContext
(请参阅下文),否则您唯一的选择是定义static boolean
字段并将其设置为{{1填充数据库的方法,如果它是类中的第一次运行。我想通过在@Before
方法中if
来表达你的意思。
现在,如果您愿意为每个测试类加载不同的@Before
,则可以定义一个唯一的ApplicationContext
类或XML配置文件,用于填充给定测试类的数据库。然后,您可以注释您的测试类,如:
@Configuration
或
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "/standard-test-config.xml", "TestClass1-config.xml" })
@DirtiesContext( classMode = ClassMode.AFTER_CLASS )
public class TestClass1 { / * ... */ }
然后,您可以在@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { StandardTestConfig.class, TestClass1.Config.class })
@DirtiesContext( classMode = ClassMode.AFTER_CLASS )
public class TestClass1 { / * ... */ }
课程中使用XML中的<jdbc:embedded-database ...>
或<jdbc:initialize-database ...>
或EmbeddedDatabaseBuilder
或ResourceDatabasePopulator
(DatabasePopulatorUtils
}。< / p>
当然,为这样的每个测试类加载不同的@Configuration
可能会极大地降低测试套件的速度,尤其是ApplicationContext
需要很长时间才能加载。因此,您需要考虑到这一点。
此致
萨姆
答案 1 :(得分:0)
注释@BeforeClass
允许为一组测试运行初始化代码。这是javadoc:
有时,多个测试需要共享计算成本高昂的设置 (比如登录数据库)。虽然这可以妥协 测试的独立性,有时候是必要的优化。 使用@BeforeClass注释public static void no-arg方法会导致 它在类中的任何测试方法之前运行一次。该 超级类的@BeforeClass方法将在那些之前运行 现在的课程。