如何执行第一个@After无效后()从junit然后@ExpectedDatabase从db-unit?
问题描述:
我想测试一个数据库视图,我使用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));
}
}
答
您的@TestExecutionListeners
声明被打破:它不会编译 “原样”。
确保您的TransactionalTestExecutionListener
和的DbUnitTestExecutionListener
通过@TestExecutionListeners
注册和注释您的测试类Spring的@Transactional
注释,类似于下面的东西...
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfigTest.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class })
@Transactional
public class ClassTest { /* ... */ }
如果更换'@Before会发生什么'和'@ After'分别用'@ BeforeTransaction'和'@ AfterTransaction'? –
@SamBrannen我试过了,但测试仍然失败。我认为db单元在春季交易前有自己的交易 –
你如何配置DbUnit支持?从你发布的代码看,DbUnit甚至不可能执行。 –