2017-07-10 74 views
1

我想测试一个数据库视图,我使用db-unit将数据插入到被测试的视图和期望值所使用的表中。表单视图是由db-unit完成的,但是此视图使用某些数据形成了另一个我想要的视图以模拟,我已经做了一些脚本与模拟数据替换视图,完成测试方法模拟视后替换原来的观点如何执行第一个@After无效后()从junit然后@ExpectedDatabase从db-unit?

但是我发现一个问题,@ExpectedDatabase之后@After void after()方法调用,测试失败。

如何从junit执行第一个@After void after(),然后从db-unit执行@ExpectedDatabase

这里是我的代码:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = ApplicationConfigTest.class) 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener. DirtiesContextTestExecutionListener.class }) 
public class ClassTest { 

private static final String MOCK_REOURCE_PATH = "classpath:sql/mock_view.sql"; 

private static final String ORIGINAL_REOURCE_PATH = "classpath:sql/original_view.sql"; 

@Autowired 
private ApplicationContext applicationContext; 

@Before 
public void init() { 
    ScriptUtils.executeSqlScript((DataSource) applicationContext.getBean("dataSource").getConnection(), applicationContext.getReource(MOCK_REOURCE_PATH)); 
} 

    @Test 
    @DatabaseSetup("classpath:sample-data.xml") 
    @ExpectedDatabase(assertionMode = NON_STRICT, value = "classpath:expected-data.xml") 
    public void testView() { 
    } 

    @After 
    public void after() { 
    ScriptUtils.executeSqlScript((DataSource) applicationContext.getBean("dataSource").getConnection(), applicationContext.getReource(ORIGINAL_REOURCE_PATH)); 
    } 
} 
+0

如果更换'@Before会发生什么'和'@ After'分别用'@ BeforeTransaction'和'@ AfterTransaction'? –

+0

@SamBrannen我试过了,但测试仍然失败。我认为db单元在春季交易前有自己的交易 –

+0

你如何配置DbUnit支持?从你发布的代码看,DbUnit甚至不可能执行。 –

回答

0

您的@TestExecutionListeners声明被打破:它不会编译 “原样”。

确保您的TransactionalTestExecutionListenerDbUnitTestExecutionListener通过@TestExecutionListeners注册和注释您的测试类Spring的@Transactional注释,类似于下面的东西...

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = ApplicationConfigTest.class) 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, 
    DirtiesContextTestExecutionListener.class, 
    TransactionalTestExecutionListener.class, 
    DbUnitTestExecutionListener.class }) 
@Transactional 
public class ClassTest { /* ... */ } 
相关问题