我有一个简单的弹簧项目,并尝试使用Spring-Dbunit进行一些服务测试。我使用JDBCTEMPLATE进行数据库访问。豆配置:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" c:dataSource-ref="dataSource"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:springtestdbunit"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
测试类看起来像:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/it/tostao/sswa/sswai-test.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.class})
public class CarServiceImplTest {
Logger LOG = LoggerFactory.getLogger(CarServiceImplTest.class);
@Autowired
private JdbcTemplate jdbcTemplate;
private CarService carService;
@Before
public void setUp() {
carService = new CarServiceImpl(jdbcTemplate);
}
/**
* Test cars counter.
*/
@Test
@DatabaseSetup("cars.xml")
public void checkCounter() {
int nbOfCarsInGarage = carService.sizeInGarage();//SELECT count(*) from car;
LOG.info("No of cars = " + nbOfCarsInGarage);
Assert.assertEquals(2, nbOfCarsInGarage);
}
}
cars.xml是一个简单的数据集:
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<car brand="BMW" model="E91" year="2006" doorsNumber="5" plate="XXX1234" />
<car brand="Hyundai" model="Accent" year="2000" doorsNumber="4" plate="YYY333" />
</dataset>
我必须在配置中出错,但是当Call Carservice.SizeingArage()我看到消息:
org.springframework.jdbc.badsqlgrammarexception:statementCallback; 不良SQL语法[从汽车中选择计数()];嵌套异常是 java.sql.sqlexception:在语句中找不到表[select count() 从汽车]
我应该在运行测试之前init db还是@databasesetup和插座找到XML文件的问题?如何检查HSQLDB启动并正确工作?
您需要在运行单元测试之前提供一种创建模式的方法。DBunit的工作方式是在运行特定测试之前将数据库放在"已知状态"中。
如果您安装了RDBMS,则应该已经创建了数据库;但是,如果您使用的是内存数据库(更可能在此问题上),则必须提供一个SQL脚本(或其他方式)才能在启动内存数据库时为您创建架构。
在这里看看,这可能会有所帮助。