java - 如何用测试值和实际值填充大型 stub pojo?

标签 java junit mocking mockito

在为分析计算器编写 junits 时,我意识到为了测试一个简单的功能,我手动创建了带有测试值的 stub pojo,这会花费更多时间来编写实际的业务逻辑吗? 例如,如果我想检查一个计算总和的函数 ( person.age )/count (person) 现在,在编写 java junits 时,我模拟了返回一个人对象集合的服务,然后手动创建了 3 个 person 对象,每个对象都有一定的年龄。

现在如果人员类别很大,比如 30-40 个字段。有没有简单的方法来创建这样的对象?就像从数据库中提取数据并通过解析从数据库中获取的 CSV 文件来动态创建对象一样?

我想知道推荐的方法是什么?

最佳答案

嗯,单元测试的一个基本特征是它们应该很快。如果单元测试花费的时间太长,人们就会停止执行它。出于这个原因(以及单元测试控制之外的错误危险,例如数据库关闭),我不建议将值存储在数据库中。

但是您的案例听起来好像您实际上不需要填写 30-40 个字段,对吗?为什么你的类(class)需要所有这些?如果你这样做,这些字段是否真的有意义,或者你可以用随机数据填充它们?或者除了您要测试的内容之外,每个人都可以拥有相同的数据吗?

就个人而言,我宁愿不访问文件或类似的东西来测试与文件处理无关的东西,所以我会寻找一种方法来限制测试必须做的事情(测试也应该很容易,如果它非常长,没有人理解它)。如果必须的话,我会选择文件而不是数据库(仅仅是因为文件可以存储在测试资源中并且至少比数据库问题少)。但是,最好的方法可能不需要文件或数据库。

关于java - 如何用测试值和实际值填充大型 stub pojo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631540/

相关文章:

unit-testing - 如何使用 ` func(w http.ResponseWriter, r *http.Request) `进行模拟测试

c# - XUnit 如何对业务对象进行单元测试,我应该模拟所有内容吗?

java - 为什么 session bean 方法在抛出 RuntimeException 时抛出 EjbTransactionRolledbackException

java - Android 客户端应用程序(可能通过 USB 使用 ADB)

java - 如何使用 Mockito/PowerMockito 解决 ClassCastException

junit - 异常的Java单元测试

rust - 是否可以使用 Mockall 模拟单个方法?

java - 如何将托管bean(非静态)注入(inject)静态方法?

java - 使用 hibernate 截断所有表的最佳方法?

Jenkins xUnit 测试结果报告