我的项目使用 Spring Boot。当我运行我的应用程序时,如果我运行我的单元测试(@RunWith(SpringJUnit4ClassRunner)
),我得到以下错误。我不知道为什么spring在单元测试中没有使用application.properties(定义了哪些数据源参数)。
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:579)
... 106 more
Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:236)
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.initializeDataSourceBuilder(DataSourceProperties.java:176)
at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.createDataSource(DataSourceConfiguration.java:43)
at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari.dataSource(DataSourceConfiguration.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 107 more
我的单元测试课程是:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Application.class)
public class RepoTest {
@Autowired IRepo repo;
@Test
public void listCards() {
repo.findCardNo(1L, "00981231231");
}
}
你可以试试@TestPropertySource
并添加特定文件。这样您就可以为测试和实际应用程序提供不同的属性。
您可以使用 @TestPropertySource 覆盖 application.properties 中的值。来自它的javadoc:
测试属性源可用于有选择地覆盖系统和应用程序属性源中定义的属性
例如:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Application.class)
@TestPropertySource(locations="classpath:test.properties")
public class RepoTest {
另外,对于单元测试,您可能会考虑模拟数据库以了解正确的响应。首先,单元测试会运行得更快。此外,您的单元测试不应因外部服务(数据库)而失败,因为即使数据库离线,代码也能正常工作。
然后您可以进行一些实际连接到数据库的更复杂的集成测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)