请有人帮我解决以下问题。有没有办法从sql数据文件加载数据库?在我的测试中我使用dbunit。我通常只在我的本地mysql服务器上创建新的数据库模式,然后将所有数据加载到此模式,然后在java中测试它就像这样
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:context/DAOTestContext.xml")
public class HistoricalDataDAOTest {
private final Integer id = 66124;
private final Integer startDate = 20140101;
private final Integer endDate = 20140102;
@Autowired
private HistoricalDataDAO histDataDAO;
public HistoricalDataDAOTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void getTest() {
List portions = histDataDAO.get("ing", startDate, endDate);
System.out.println(portions);
assertNotNull(portions);
}
@Test
public void getByOrderIdTest() {
List<HistoricalPortions> h = histDataDAO.getByOrderId(id);
assertNotNull(h);
}
}
但我需要在每次测试之前从sql文件加载数据库,我的意思是我想将数据库从sql文件加载到空数据库模式中。在dbunit中有类似的东西 @DatabaseSetup(&#34; test_db.sql&#34;),但我认为这不是sql文件。 拜托,有什么方法可以做到吗?
答案 0 :(得分:1)
由于您使用的是Spring,因此可以在@Before方法中使用ScriptUtils:
Connection connection = dataSource.getConnection();
ScriptUtils.executeSqlScript(connection, new ClassPathResource("test_db.sql"));
答案 1 :(得分:0)
我更喜欢executing SQL scripts declaratively with @Sql。
@Sql("/test_db.sql")
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:context/DAOTestContext.xml")
public class HistoricalDataDAOTest {
...
}
我还建议你在测试中使用@Transactional。这将导致数据库的任何更改都回滚。它可以在类或方法级别应用。
手册中有关此内容的章节 - https://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontext-executing-sql