gpt4 book ai didi

java - 创建测试数据 : domain builder

转载 作者:行者123 更新时间:2023-11-28 20:56:20 24 4
gpt4 key购买 nike

我想使用底层内存数据库为我的测试创建测试数据。常见的方法是创建一些 test_data.sql 文件并创建带有插入的测试对象。然后在java测试中引用这些对象。

我读入了Growing Object-Oriented Software, Guided by Tests ,测试不需要深入细节。例如,如果测试想要具有 NEW 状态的现有用户,那么他不需要创建用户并填写它的所有字段。但他应该只告诉他,他希望用户具有 NEW 状态,并且所有其他字段都应填充默认值。

所以我想要辅助方法,比如这个:

User user = user(UserStatus.NEW); // inserts user in database
// ... use persistent user instance in test

但是我的数据库模式有很多表,我得到了以下代码:

Domain domain = new DomainBuilder().user(UserStatus.NEW).agreement().account().account().build();

域类:

public class Domain {
private User user;
private Agreement agreement;
private Account account;
// getters/setters
}

此代码创建用户、协议(protocol)(与用户的 FK)、两个帐户(与协议(protocol)的 FK)并返回包含这些实体的域对象。

因此,使用这段代码,我基本上可以在一行中为特定测试设置测试数据。

这种测试数据生成方式相比SQL有以下优势:

  • 如果某些列/约束是添加/删除,那么我就不需要在我的测试中更改测试数据生成。

  • 更简洁的方式,SQL:我可以在一行中设置测试数据而 SQL 方法需要为每个对象编写 INSERT。

  • 耗时更少。是的,首先你开始使用这种方法,你必须花一些时间来实现这样的域构建器,但一旦完成,你就会节省很多时间。

  • 集中创建对象。如果您的数据库架构发生变化,那么您只需在一处更改对象创建逻辑。

  • 您不需要坚持使用 USER_WITH_NEW_STATUS_ID 等 java 常量。

我的问题是:

是否有人也采用这种方法以及为此使用了哪些库/工具/约定?

更新:我在几种测试类型中使用了这种方法:

  • 存储库测试(例如存储库正确过滤对象,或者它返回对象以正确的顺序列出)。

  • 业务逻辑+数据库集成测试(单元测试很好,但有时我需要100%确定我的业务逻辑和仓库逻辑是一致的

最佳答案

你检查过 DBUnit 了吗?

http://www.dbunit.org/

它是针对数据库驱动项目的 JUnit 扩展,除其他外,它使您的数据库在测试运行之间处于已知状态。

数据集是一个简单的 XML 文件。

关于java - 创建测试数据 : domain builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16076699/

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