创建一个假的javax.sql.DataSource



我必须使用字符串测试框架编写测试,其中使用了许多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>

相关内容

  • 没有找到相关文章

最新更新