制作一个假的javax.sql.DataSource?

时间:2014-06-18 16:24:27

标签: java spring testing datasource spring-test

我必须使用String Test框架编写测试,其中使用了许多数据库连接。

在测试中我不需要所有数据源但是Spring希望它们全部注入。

是否有任何标准或众所周知的伪 javax.sql.DataSource 实现只是为了满足Spring DI机制?

5 个答案:

答案 0 :(得分:2)

您可以使用Mockito框架。 使用Springockito,您可以在Spring环境中模拟数据源。

此资源的信用额度为kubek2k中的this SO answer

答案 1 :(得分:2)

我不知道众所周知的DataSource模拟。您可以使用模拟框架之一(例如Mockito)自己模拟它,但恕我直言更好的解决方案是使用纯Java内存数据库,如H2,HSQLDB或Derby。您将获得具有真实数据的真实数据源,您可以以编程方式填写测试代码并模拟生产代码中可能发生的任何情况。

答案 2 :(得分:2)

首选使用Mockito(或其他模拟框架)(如其他答案所述)。但是,如果您只想使应用程序上下文(不抱怨数据源),则可以使用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()

  }
}

答案 3 :(得分:1)

您可以使用Spring的org.springframework.jdbc.datasource.AbstractDataSource,它已经为大多数接口方法提供了一些默认值。您只需要覆盖两个即可。

答案 4 :(得分:0)

这是我做的工作样本:

<!-- 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>