Unitils 与 Spring TestContext 框架
Posted
技术标签:
【中文标题】Unitils 与 Spring TestContext 框架【英文标题】:Unitils vs Spring TestContext Framework 【发布时间】:2011-11-16 09:30:03 【问题描述】:我正在考虑为我的 spring+hibernate Web 应用程序使用哪个测试框架。 最初我发现并且对 Unitils 很感兴趣,但后来我看到了标准的 Spring TestContext 框架并开始产生一些疑问。我对这个主题很陌生,但到目前为止我的理解如下:
Unitils 专业人士:
混合了各种其他测试框架,例如 EasyMock 或 DbUnit 构建在框架之上,提供一些附加价值,即休眠映射测试或反射测试实用程序Spring TestContext 框架专家:
允许在测试时使用标准 Spring 注释 可能拥有更大的用户群和更好的支持(这是我的假设,因为 Unitils 似乎基本上是由两个人创建的) 还内置了一些 Unitils 功能(例如反射测试实用程序) 如果我需要任何 Unitils 的“更大”功能,例如 DbUnit 或 EasyMock,我可以直接从源代码获取常规 DbUnit 或 EasyMock - 这使我可以始终拥有最新版本的 DbUnit/EasyMock,而无需等待 Unitils使用当前的 DbUnit/EasyMock 发布他们的新版本所以现在我更倾向于使用 Spring TestContext Framework。 有没有人对这些框架有更多经验并且可以帮助我朝着正确的方向倾斜?除了集成所有这些框架之外,Unitils 本身实际上提供了什么?
[编辑] 刚刚发现了 Unitils 提供的更多内容:
对 DbUnit 的一些改进,例如 @DataSet 注释(在 Spring TestContext Framework 中,如果您想将其与 DbUnit 一起使用,您必须自己编写更多代码,如下所述:http://blog.zenika.com/index.php?post/2010/02/04/Testing-SQL-queries-with-Spring-and-DbUnit%2C-part-1) 能够在您的测试中禁用数据库约束这是一个关于 Unitils 的精彩演示,它说服我开始使用 Unitils: http://www.javapolis.com/confluence/download/attachments/32918/C_14_09_04.pdf
我暂时不回答这个问题,也许有人会提出其他想法......
【问题讨论】:
小更新:现在,在 2014 年,Unitils
似乎几乎被废弃,而spring-test
正在积极开发中。所以回答,选择哪一个似乎很清楚。
【参考方案1】:
我们在项目中使用 Unitils 和 Spring 的测试框架。使用 unitils 时,我们遇到的问题是拥有多个 PersistenceUnit。 Unitils 不支持它。春天当然可以。
我们遇到的另一个问题我在这里发布了:Using unitils/dbMaintain to maintain database, how to exclude scripts from being run?
基本上,unitils 并不具备每个底层框架(例如 DBMaintain)的所有最新功能,因为 unitils 使用的是其他框架的“旧”版本。
也就是说,Unitils 确实有一些非常方便的方法,比如DatabaseUnitils 中提供的一些方法。我们特别喜欢updateSequences()
因此,为了获得最大的灵活性和/或如果您预计会有相当复杂的代码结构,我会尽可能坚持使用 Spring 的测试框架。
在许多其他情况下,unitils 是一个非常方便的工具。
还有一点 p.s... 如果可能的话,我建议优先使用单元测试和模拟框架,如 Mockito 与集成测试。我一直是“集成测试”重度测试人员,在最后一个项目中,它变成了一些维护挑战。
【讨论】:
感谢您分享您的经验 :) 您提到使用 Mockito - 您是否更喜欢它而不是已经与 Unititls 捆绑的 EasyMock? 我听说过支持/反对这两个框架的好论据。我没有用过 EasyMock。当我阅读它与 mockito 及其相关文档时,mockito 似乎更简单、更直接。所以我选择了mockito。 YMMV。 Unitils 中的 EasyMock 支持现已弃用。相反,它提供了“Unitils Mock”模块,该模块提供了一个现代的模拟 API,它 (IMO) 明显优于 EasyMock 或 Mockito API。【参考方案2】:正如您所指出的,Unitils 是一个非常好的框架。
优点:
-
Unitils 现在使用 Spring jar。
在我看来,Unitils 注入模块效果很好,尽管您也可以在 spring 中实现类似的功能。
缺点: 正如您所说,我相信它在 Unitils 论坛中缺乏适当的支持。我可以看到很多帖子很久没有回答了。但是 *** 对它有很好的支持 :-) 除非您需要额外的功能或错误修复。
就我个人而言,我发现 Unitils 非常适合我的测试。
【讨论】:
以上是关于Unitils 与 Spring TestContext 框架的主要内容,如果未能解决你的问题,请参考以下文章
使用 Unitils 对 Postgres 数据库运行单元测试时出现 NullPointerException
使用 @DynamicPropertySource 的 TestContainers、Spring Webflux、JUnit 5、MySQLR2DBCDatabaseContainer