有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

@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) 个答案

  1. # 1 楼答案

    我建议您在某处创建一个测试bean,并在^{中调用启动逻辑:

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

    显然,这个bean应该只为测试而创建,实现这一点的最简单方法是将它放在Spring为@Service注释类src/test/java指定的包中

    注意:您必须记住@PostConstruct没有在事务中运行!见How to call method on spring proxy once initialised

  2. # 2 楼答案

    JUnit还提供了@BeforeClass注释,您可以将其放在静态方法上,只需初始化一次资源