模拟数据库驱动程序[英] Mock database driver

问题描述

是否有某种JDBC驱动程序可以简单地忽略数据库调用?

对于开发,我将应用程序迁移到虚拟机.在这里,我只想在GUI部分工作.但是该应用程序向数据库提出了几个请求,该请求甚至不允许应用程序启动.由于数据库几乎耦合,我目前不想更改应用程序代码.

所以我认为可能有一个JDBC驱动程序,它只是返回查询的空结果.

推荐答案

我决定编写自己的简单模拟驱动程序.这几乎很简单,做了我想要的.我可以通过配置文件切换应用程序的数据库驱动程序,以便让应用程序以简单的方式使用驱动程序.

然后,我将驱动程序扩展到返回从CSV文件解析的数据.我在Google代码上发布了该代码,也许其他人可以使用它: dummyjdbc

其他推荐答案

有一些" void" JDBC驱动程序作为嘲笑框架的一部分.

但是使用它需要一些编码.

那是因为当Java应用程序连接到数据库时,它提供了jdbc:mysql://localhost jdbc:mysql://localhost的JDBC URL.该系统正在搜索其中在其中注册了哪个驱动程序以处理此类URL并选择合适的驱动程序.驱动程序本身中包含有关哪种URL类型驱动程序支持的信息,模拟驱动程序不可能将所有已知的URL类型保存在其中 - 没有诸如通配符之类的东西,任何列表都不完整.

因此,如果您能够调用 jdbcmockobjectfactory.registermockdriver()在应用程序连接到数据库之前,它将完成工作.如果没有 - 我认为这是不可能的.但是,对驱动程序代码的稍作修改会做到...但是再次 - 需要编码.

其他推荐答案

JOOQ 带有 MockConnection 带有 MockDataProvider MockDataProvider 比完整的JDBC API更容易实现.这篇博客文章显示了如何使用模型连接: http://blog..jooq.org/2013/02/20/易于模拟 - 您的数据库/

一个示例:

MockDataProvider provider = new MockDataProvider() {

    // Your contract is to return execution results, given a context
    // object, which contains SQL statement(s), bind values, and some
    // other context values
    @Override
    public MockResult[] execute(MockExecuteContext context) 
    throws SQLException {

        // Use ordinary jOOQ API to create an org.jooq.Result object.
        // You can also use ordinary jOOQ API to load CSV files or
        // other formats, here!
        DSLContext create = DSL.using(...);
        Result<MyTableRecord> result = create.newResult(MY_TABLE);
        result.add(create.newRecord(MY_TABLE));

        // Now, return 1-many results, depending on whether this is
        // a batch/multi-result context
        return new MockResult[] {
            new MockResult(1, result)
        };
    }
};

// Put your provider into a MockConnection and use that connection
// in your application. In this case, with a jOOQ DSLContext:
Connection connection = new MockConnection(provider);
DSLContext create = DSL.using(connection, dialect);

// Done! just use regular jOOQ API. It will return the values
// that you've specified in your MockDataProvider
assertEquals(1, create.selectOne().fetch().size());

也有,它通过编写这样的文本文件来帮助您将虚拟结果与SQL字符串匹配:

# This is a sample test database for MockFileDatabase
# Its syntax is inspired from H2's test script files

# When this query is executed...
select 'A' from dual;
# ... then, return the following result
> A
> -
> A
@ rows: 1

# Just list all possible query / result combinations
select 'A', 'B' from dual;
> A B
> - -
> A B
@ rows: 1

select "TABLE1"."ID1", "TABLE1"."NAME1" from "TABLE1";
> ID1 NAME1
> --- -----
> 1   X
> 2   Y
@ rows: 2

本文地址:https://www.itbaoku.cn/post/978761.html

相关标签/搜索