如何仅在 Hybris 项目中运行单元测试?
Posted
技术标签:
【中文标题】如何仅在 Hybris 项目中运行单元测试?【英文标题】:How to run unit tests only in a Hybris project? 【发布时间】:2015-04-12 02:29:01 【问题描述】:我们这里有一个大型 Hybris 项目,运行所有测试需要很长时间(数小时,是的,一家大型咨询公司创造了这种废话)。我的目标是减少所有基于 spring 的集成测试,并用真正的单元测试代替它们。
但是,当使用 Hybris ant 构建为一个扩展 (ant alltests -Dtestclasses.extensions=myext
) 运行测试时,如果该扩展中只有非基于 Spring 的单元测试,也会使用 junit 租户启动服务器。我也尝试使用ant unittests
,但它甚至没有执行我的测试。
有没有什么方法可以只运行带有@UnitTest
注释的测试,而无需在 ant 运行中启动任何服务器?
PS:我有一个 hybris 5.1 和 5.3 商务套件
【问题讨论】:
【参考方案1】:这是很好的信息。但是,在我看来,即使为单个扩展运行单元测试仍然太多了。单元测试应该是FAST!如果我选择的话,我应该能够在我的 IDE 中运行单个单元测试方法。如果我每次想要测试重构的代码时都必须等待一堆不相关的单元测试运行,那么“红绿测试”的整个概念就会丢失。
由于这些测试依赖于运行时环境,Hybris 中没有单元测试。只有集成测试,因为它们都依赖于正在运行的 Hybris 系统来执行。
【讨论】:
你完全正确!整个 Hybris 框架完全是一团糟,我从未将其作为经验提及,以确保我永远不必使用它。这是一个真正的痛苦,我在 20 年的软件工程中看到的最糟糕的【参考方案2】:我想详细说明如何在 IDE 中运行单元测试。
安装 IntelliJ 安装 Hybris 插件 (https://plugins.jetbrains.com/plugin/7525-hybris-integration) 导入项目 像任何普通开发人员一样运行 UnitTest 享受:)【讨论】:
真正的问题是,如果不启动至少涉及启动 hybris 系统的 hybris 中的 junit 租户,您将无法运行单元测试。在我看来,这对 SAP 来说是一个巨大的失败。为什么我不能简单地在任何运行时之外运行我的单元测试?使用 hybris 插件从 intelliJ 运行它们只是依赖 hybris 运行时的另一种方式。如果我需要从 CI/CD 管道运行单元测试怎么办?我必须运行所有需要一个多小时的测试,或者我必须为每个扩展/测试组启动一个 hybris 实例。对不起...这是失败的。【参考方案3】:您应该使用ant unittests
而不是ant unit tests
:
ant unittests -Dtestclasses.extensions=myext
注意
当有人在被测代码中使用Registry.getApplicationContext()
时,专门运行简单的单元测试并不容易!
事实上,Registry.getApplicationContext()
启动了一个 Hybris 实例。如果您遇到这种情况,您需要使用更好的类设计和/或模拟来消除对 Registry.getApplicationContext()
的特定调用。
【讨论】:
是的,注册表是 hybris 不了解依赖注入的地方 似乎您适合 5.3,不适用于 5.1(未找到测试)以上是关于如何仅在 Hybris 项目中运行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章
TryUpdateModel 仅在更新子对象的单元测试中失败