gpt4 book ai didi

java - dbunit 性能最佳实践

转载 作者:太空狗 更新时间:2023-10-29 22:56:56 29 4
gpt4 key购买 nike

除了实际 dbunit 站点上推荐的那些之外,还有哪些最佳实践/原则可以大大加快测试速度并保持它们的可维护性?我渴望一个library like factory girl对于 java,但由于静态类型,它看起来不太可能。

我目前的想法是此时每个测试类有 1 个 xml 数据集——也许我分享了其中的一些,也许我没有。虽然一些测试数据可能会跨数据集重复,但我发现很难在 3000 个单元/集成测试中维护共享数据集 - 而且我还有很长的路要走。

希望能遵循任何导致测试性能良好且易于维护的原则。

最佳答案

在我之前的一项任务中,我们进行了数百个涉及数据集的集成测试,尽管不是在 DBUnit 中——测试环境是从头开始编写的,因为它是一家可以负担得起这种东西的大公司。

数据集是分层组织的。被测系统由几个 (5-10) 个模块组成,测试数据遵循该模式。单元测试脚本如下所示:

 include(../../masterDataSet.txt)
include(../moduleDataSet.txt)

# unit-specific test data
someProperty=someData

属性名称是通过一些我不记得的奇怪工具直接映射到数据库记录的。

相同的模式可以应用于 DBUnit 测试。在主数据集中,您可以放置​​始终需要的记录——如字典、数据库的初始加载,就好像它是从头开始安装的一样。

模块数据集中,您将记录涵盖模块中大多数测试的测试用例;我不认为您的平均测试涉及所有 70 个数据库表,是吗?你肯定必须有一些可以构成模块的功能组,即使应用程序是整体的。尝试围绕它组织模块级测试数据。

最后,在测试级别,您只需使用此特定测试所需的最少记录数来修改您的测试集。

这种方法对学习有巨大的好处;因为数据文件少,久而久之,你就真正开始背了。您不必看到数百个仅在不明显的细节上有所不同的大数据集(一段时间后每次返回测试时都必须找出这些细节),您可以轻松地分辨出任何两个数据集有多么不同。

最后谈谈性能。在我的 2.4 GHz 2 核 WinXP 机器上,DBUnit 测试涉及:

  • 丢掉 14 张 table ,
  • 创建 14 个表,
  • 插入约。 100 条记录,
  • 执行测试逻辑,

需要 1-3 秒。日志显示前 3 个操作用时不到一秒,大部分测试时间都被 Spring 消耗了。此逻辑由每个测试执行,以避免测试顺序依赖性。一切都在一个带有嵌入式 Derby 的虚拟机中运行,这可能就是它如此之快的原因。

编辑:我认为 DBUnit XML 数据集不支持包含其他测试文件,可以通过对所有集成测试使用基类来克服它,例如:

public class AbstractITest {

@Before
public void setUp() throws Exception {
//
// drop and recreate tables here if needed; we use
// Spring's SimpleJdbcTemplate executing drop/create SQL
//
IDataSet masterDataSet = new FlatXmlDataSetBuilder().build("file://masterDataSet.xml");
DatabaseOperation.CLEAN_INSERT.execute(dbUnitConnection, dataSet);
}
}

public class AbstractModuleITest extends AbstractITest {

@Before
public void setUp() throws Exception {
super.setUp();
IDataSet moduleDataSet = new FlatXmlDataSetBuilder().build("file://moduleDataSet.xml");
DatabaseOperation.CLEAN_INSERT.execute(dbUnitConnection, moduleDataSet);
}
}

public class SomeITest extends AbstractModuleITest {
// The "setUp()" routine only here if needed, remember to call super.setUp().

@Test
public void someTest() { ... }
}

关于java - dbunit 性能最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8454720/

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