在BeforeClass方法中如何将init数据插入db

时间:2017-06-22 13:59:10

标签: spring-test

我有一个UserServiceTest,我想初始化一些用户数据到数据库进行测试,例如queryByName,groupByAge等。我想在这个类中只加载一次,所以我想使用BeforeClass

@BeforeClass
public static void init(){
    // ...
}

但在这种情况下,我发现我无法使用jdbcTemplate来插入数据,就像在Before中一样

@Before
public void setUp(){
    // prepare test data first        
    jdbcTemplate.execute("insert into user(firstname,lastname,birthday) values(...);");
}

那么在BeforeClass方法中如何插入init数据?

1 个答案:

答案 0 :(得分:0)

或者,您可以使用TestExecutionListeners在测试课程之前初始化数据库。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
@TestExecutionListeners(mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS, listeners = {
        DbInitializerTestListener.class })
public class DbTest {

}


public class DbInitializerTestListener extends AbstractTestExecutionListener {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void beforeTestClass(TestContext testContext) throws Exception {
        testContext.getApplicationContext()
                .getAutowireCapableBeanFactory()
                .autowireBean(this);
        jdbcTemplate.execute("insert into user(firstname,lastname,birthday) values(...);");

    }
}

或者你可以考虑DbUnit框架。