我必须使用字符串测试框架编写测试,其中使用了许多DB连接。
在测试中,我不需要所有的数据源,但Spring希望它们都注入。
是否有任何标准或众所周知的假javax.sql。数据源实现只是为了满足Spring DI机制?
首选使用Mockito(或其他mock框架)(如其他答案所指出的)。但是,如果您只想创建应用程序上下文(而不抱怨数据源),则可以使用org.springframework.jdbc.datasource.SimpleDriverDataSource
。
您需要向上下文提供bean,该名称覆盖原始bean,并确保首先扫描您的假bean。
@Configuration
public class MyFakeConfig {
@Bean(name = "NAME OF THE ORIGINAL BEAN TO OVERRIDE")
public DataSource fakeDataSource() {
return new SimpleDriverDataSource()
}
}
可以使用Mockito框架。使用springckit,您可以在Spring环境中模拟您的数据源。
这个资源是kubek2k在这个SO答案中的功劳
我不知道众所周知的DataSource
mock。您可以使用模拟框架(例如Mockito)来模拟它,但我认为更好的解决方案是使用纯java内存数据库,如H2、HSQLDB或Derby。您将获得具有真实数据的真实数据源,您可以以编程方式在测试代码中填充这些数据,并模拟生产代码中可能发生的任何情况。
你可以使用Spring的org.springframework.jdbc.datasource.AbstractDataSource
,它已经为大多数接口方法提供了一些默认值。你只需要重写两个
这是我的示例:
<!-- Create object with mocked parts that not used. -->
<bean id="config" class="org.Config">
<constructor-arg>
<bean class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="javax.sql.DataSource"/>
</bean>
</constructor-arg>
<property name="day" value="6"/>
</bean>
用
更新pom.xml
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
使用
<spring.version>3.0.0.RELEASE</spring.version>