如何在Hybris项目中仅运行单元测试?

7
我们这里有一个大型的Hybris项目,运行所有测试需要很长时间(数小时,是的,一家大型咨询公司创建了那个玩意)。我的目标是通过真正的单元测试来减少所有基于Spring的集成测试。
但是当使用Hybris ant构建一个扩展的测试时(ant alltests -Dtestclasses.extensions=myext),即使该扩展中只有非Spring基础单元测试,它也会启动具有junit租户的服务器。我还尝试使用ant unittests,但那个甚至不执行我的测试。
是否有任何方法可以在ant运行中仅运行带有@UnitTest注释的测试,并且没有任何服务器启动?
PS:我有Hybris 5.1和5.3商业套件
4个回答

8
您应该使用ant unittests而不是ant unit tests:
ant unittests -Dtestclasses.extensions=myext

注意

当测试代码中使用了 Registry.getApplicationContext() 时,仅运行简单单元测试不是很容易!

事实上,Registry.getApplicationContext() 会启动一个 Hybris 实例。如果你遇到这种情况,你需要通过更好的类设计和/或模拟来消除对 Registry.getApplicationContext() 的调用。


2
是的,Registry是hybris没有理解依赖注入的点。 - Arne Burmeister
看起来你对5.3是正确的,但在5.1上不起作用(没有找到测试)。 - Arne Burmeister

3
这是很好的信息。然而,在我看来,即使仅运行单个扩展的单元测试仍然过于繁琐。单元测试应该快速!如果我选择的话,我应该能够从我的IDE中运行单个单元测试方法。如果每次我想测试重构后的代码都要等待一堆不相关的单元测试运行,那么“红-绿测试”的整个概念就会丧失。
由于这些测试依赖于运行时环境,因此在Hybris中没有单元测试。只有集成测试,因为它们都依赖于正在运行的Hybris系统来执行。

4
你说得完全正确!整个Hybris框架实在是一团糟,我从未将其作为经验提及,以确保我永远不必与它共事。这真是一种痛苦,是我20年软件工程中所见过最糟糕的。 - Arne Burmeister

0

这是用于运行特定测试类的。

ant unittests -Dtestclasses.extensions="ext_name" -Dtest=com.erk.b2b.integrations.service.ecom.impl.ServiceImplTest


-2

4
真正的问题在于,在hybris中至少需要初始化junit租户才能运行单元测试,这涉及启动hybris系统。在我看来,这对SAP来说是一个巨大的失败。为什么我不能在任何运行时之外简单地运行我的单元测试?使用具有hybris插件的intelliJ运行它们只是另一种依赖于hybris运行时的方式。如果我需要从我的CI/CD流水线运行单元测试怎么办?我要么运行所有测试,需要超过一个小时的时间,要么我必须为每个扩展/测试组启动一个hybris实例。抱歉...这是一个失败。 - jkilgrow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接