如何在测试中只执行一次方法设置
How can performed method setUp only once in tests
我有测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestRepositoryConfig.class})
@Transactional
public class ServiceTest {
@Autowired
private UserRepository userRepository;
@Autowired
private Service service;
static {
initTestUser();
}
public void setUp() {
userRepository.seve(testUser);
}
public void test1() { ... }
public void test2() { ... }
我需要先启动方法 setUp,保存 testUser,然后启动方法 test1 和 test2。方法 setUp 必须只执行一次!怎么做到的?
使用@BeforeClass注释
public class MyTest {
@BeforeClass public static void setupClass() { /* Set up stuff once */ }
@Test public void test1() { /* ... */ }
}
但是请注意,静态方法无法访问实例成员,并且您要在测试前设置的东西 运行 需要是静态的。建议之后使用 @AfterClass
进行清理
我认为您要解决的问题应该以不同的方式解决。据我所知,您想用一些测试数据填充您的数据库,最好在所有测试的全局配置中这样做。
但是如果您想坚持最初的想法,您可以尝试 this blog post 中描述的听众方法。
我有测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestRepositoryConfig.class})
@Transactional
public class ServiceTest {
@Autowired
private UserRepository userRepository;
@Autowired
private Service service;
static {
initTestUser();
}
public void setUp() {
userRepository.seve(testUser);
}
public void test1() { ... }
public void test2() { ... }
我需要先启动方法 setUp,保存 testUser,然后启动方法 test1 和 test2。方法 setUp 必须只执行一次!怎么做到的?
使用@BeforeClass注释
public class MyTest {
@BeforeClass public static void setupClass() { /* Set up stuff once */ }
@Test public void test1() { /* ... */ }
}
但是请注意,静态方法无法访问实例成员,并且您要在测试前设置的东西 运行 需要是静态的。建议之后使用 @AfterClass
进行清理我认为您要解决的问题应该以不同的方式解决。据我所知,您想用一些测试数据填充您的数据库,最好在所有测试的全局配置中这样做。
但是如果您想坚持最初的想法,您可以尝试 this blog post 中描述的听众方法。