基于迁移数据的集成测试spring服务层

时间:2012-02-02 14:45:16

标签: java spring junit integration-testing junit4

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext-test.xml"})
@Transactional
public class MyServiceTest {

    @Resource(name="myService")
    public MyService myService;

    @Test
    public void testSeomthing() {
    //do some asserts using myService.whatever()
    }
}

然而,测试基于我迁移的数据,因此每次运行我的测试套件时,我都希望执行不相关的迁移代码。我不想在每个测试类中运行@Before。我想在完整的测试过程开始时运行一次,我可以把它放在哪里?

2 个答案:

答案 0 :(得分:1)

JUnit还提供@BeforeClass注释,您可以将其置于静态方法上以仅初始化资源一次。

答案 1 :(得分:1)

我建议你在@PostConstruct调用启动逻辑的地方创建一个测试bean:

@Service
public class TestBean {

    @PostConstruct
    public void init() {
        //startup logic here
    }

}

显然,只应为测试创建此bean,实现此目的的最简单方法是将其放在src/test/java的Spring component-scan的{​​{1}}包中,用于@Service - 注释类。

注意:您必须记住@PostConstruct未在交易中运行!请参阅How to call method on spring proxy once initialised