gpt4 book ai didi

java - 如何使用内存中的 H2 数据库测试 JDBI DAO?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:40 24 4
gpt4 key购买 nike

我将 Dropwizard 框架与 JDBI 和 h2-in-memory 一起用于我的测试目的。我还编写了我的 DAO,现在我想用单元测试来测试它们。我遇到了似乎符合我要求的 DBUnit。

但是如何与JDBI集成并填充测试数据呢?

最佳答案

我是这样实现的:

我创建了一个基础 dao 类来设置我的 DW 环境来为我构建一个 DBI 实例。这看起来像这样:

@BeforeClass
public static void setup() {
env = new Environment( "test-env", Jackson.newObjectMapper(), null, new MetricRegistry(), null );
dbi = new DBIFactory().build( env, getDataSourceFactory(), "test" );
dbi.registerArgumentFactory(new JodaDateTimeArgumentFactory());
dbi.registerMapper(new JodaDateTimeMapper(Optional.absent()));
}

static DataSourceFactory getDataSourceFactory()
{
DataSourceFactory dataSourceFactory = new DataSourceFactory();
dataSourceFactory.setDriverClass( "org.h2.Driver" );
dataSourceFactory.setUrl( "jdbc:h2:mem:testDb" );
dataSourceFactory.setUser( "sa" );
dataSourceFactory.setPassword( "" );
return dataSourceFactory;
}

public static DBI getDbi() {
return dbi;
}

public static Environment getEnvironment() {
return env;
}

这不会为您创建指向内存数据库的数据源。

在实际测试中不能在测试前使用 DBI 实例创建您的 DAO:

DaoA dao;
DaoB otherDao;

@Before
public void setupTests() throws IOException {
super.setupTests();
dao = dbi.onDemand(DaoA.class);
otherDao = dbi.onDemand(DaoB.class);
}

有了这个你就可以开始测试了。希望对您有所帮助。

阿图尔

为初始化编辑:

我的测试也会自行初始化。为此,我直接使用 dbi 来执行 sql 脚本。例如,测试与作为测试类路径资源的 test1.sql 脚本相关联。在这种情况下,我需要做的就是阅读该脚本并在测试前运行它。例如像这样:

            StringWriter writer = new StringWriter();
InputStream resourceStream = this.getClass().getResourceAsStream("/sql/schema.sql");
if(resourceStream == null ) {
throw new FileNotFoundException("schema not found");
}
IOUtils.copy(resourceStream, writer);
Handle handle = null;
try {
handle = dbi.open();
handle.execute(writer.toString());
handle.commit();
} finally {
handle.close();
if(resourceStream != null) {
resourceStream.close();
}
writer.close();
}

关于java - 如何使用内存中的 H2 数据库测试 JDBI DAO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com