Ye *_*too 12 java junit dbunit junit4 spring-test-dbunit
我正在使用spring-test-dbunit,我在单元测试中收到一条警告:
码:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/context.xml"})
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class })
public class TestDB {
@Autowired
private ICourseService courseService;
@Test
@DatabaseSetup("sampleData.xml")
public void testFind() throws Exception {
List<Course> courseList = this.courseService.getAllCourses();
assertEquals(1, courseList.size());
assertEquals("A001", courseList.get(0).getCourseNumber());
}
}
Run Code Online (Sandbox Code Playgroud)
警告:
1093 [main] WARN org.dbunit.dataset.AbstractTableMetaData - 发现潜在问题:配置的数据类型factory'class org.dbunit.dataset.datatype.DefaultDataTypeFactory'可能导致当前数据库'MySQL'出现问题(例如某些数据类型可能不会得到适当支持).在极少数情况下,您可能会看到此消息,因为受支持的数据库产品列表不完整(list = [derby]).如果是这样,请通过论坛请求java级更新.如果您使用自己的IDataTypeFactory扩展DefaultDataTypeFactory,请确保覆盖getValidDbProducts()以指定支持的数据库产品.
当我使用没有spring-test-dbunit的DBunit时,问题可以解决如下:
Connection jdbcConnection = DriverManager.getConnection( "jdbc:mysql://localhost/test", "root", "root");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
connection.getConfig().setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, new MySqlMetadataHandler());
Run Code Online (Sandbox Code Playgroud)
我不知道如何在spring-test-dbunit中解决这个问题.请帮忙.
Ye *_*too 16
问题解决了.我将以下配置添加到applicationContext.xml(context.xml).
<property name="location">
<value>classpath:jdbc.properties</value>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</bean>
<bean id="sqlDataTypeFactory" class ="org.dbunit.ext.mysql.MySqlDataTypeFactory" />
<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
<property name = "datatypeFactory" ref = "sqlDataTypeFactory" />
</bean>
<bean id="dbUnitDatabaseConnection" class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean">
<property name="databaseConfig" ref="dbUnitDatabaseConfig"/>
<property name="dataSource" ref="dataSource" />
</bean>
Run Code Online (Sandbox Code Playgroud)
Yse*_*ser 11
只是想添加与Java Config相同的解决方案:
@Bean
public DataSource dataSource() {
DataSource dataSource = ...
return dataSource;
}
@Bean
public DatabaseConfigBean dbUnitDatabaseConfig() {
DatabaseConfigBean dbConfig = new com.github.springtestdbunit.bean.DatabaseConfigBean();
dbConfig.setDatatypeFactory(new org.dbunit.ext.h2.H2DataTypeFactory());
return dbConfig;
}
@Bean
public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection() {
DatabaseDataSourceConnectionFactoryBean dbConnection = new com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean(dataSource());
dbConnection.setDatabaseConfig(dbUnitDatabaseConfig());
return dbConnection;
}
Run Code Online (Sandbox Code Playgroud)
为了补充现有的答案,我只想使用 Spring Boot 配置的数据源在 Spring Boot 上下文中添加对我有用的内容。在您的测试源中添加以下类(在一个将由 autoconfig 选取的包中):
@Configuration
public class DBUnitConfig {
@Autowired
private DataSource dataSource;
@Bean
public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection() {
DatabaseConfigBean bean = new DatabaseConfigBean();
bean.setDatatypeFactory(new H2DataTypeFactory());
DatabaseDataSourceConnectionFactoryBean dbConnectionFactory = new com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean(dataSource);
dbConnectionFactory.setDatabaseConfig(bean);
return dbConnectionFactory;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5349 次 |
最近记录: |