集成测试不可避免的循环 Maven 依赖关系

问题描述 投票:0回答:1

ChatGPT 这次无法帮助我,所以我来了。

我正在努力为我的集成测试设计一个好的实现设计。 让我一步步告诉你我的问题的简化故事。

  • 我创建了一个具有身份验证功能的 Maven 模块 A。
  • 我对所有内容进行了单元测试,这不是问题。
  • 我想做集成测试
  • 为了进行良好的集成测试,我必须为上下文创建实用程序类。在本例中,让我们考虑“AuthenticationClient”类(通过本地主机上的 HTTP 进行通信)。
  • 我将这些实用程序类放在集成测试源的上下文包中,以便我可以将它们用于所述测试。

到目前为止一切顺利,这就是我的困境的根源。

  • 在另一个模块 B 中,我使用模块 A 的身份验证功能(因此是一个依赖项)
  • 我想对模块B进行集成测试
  • 在这个集成测试中,我需要进行身份验证,所以我需要制作一个AuthenticationClient
  • 由于复制类是绝对不可能的,所以我需要将此类从模块 A 测试源中提取到公共模块(因为我不能使用属于另一个模块的测试源中的类)
  • 所以我天真地为 AuthenticationClient (和其他实用程序类)创建了一个模块 C
  • 由于 AuthenticationClient 依赖于模块 A 主源中的类,因此模块 C 需要模块 A 作为依赖项。
  • 现在有趣的部分,因为我已经从模块 A 提取了一些测试上下文类到模块 C(例如 AuthenticationClient),所以我需要模块 C 作为模块 A 的集成测试的依赖项(测试范围),因此循环依赖.

不出所料,即使范围不一样,它也无法工作。我真的看不到那里有任何选择。 只要我提取我想要避免重复的代码,我就不可避免地会创建循环依赖。

我尝试创建一个子模块,但它也不起作用,并且在父模块中拥有源代码是肮脏的。

我想到的一个解决方案是创建一个仅用于集成测试的模块,没有主要源代码,但这也不是很漂亮,因为我知道在这种情况下我仍然需要将上下文类提取到单独的模块中......

有人有更好的主意吗?

编辑:我可能找到了解决方法。实际上,我应该能够使测试上下文类完全独立于它们应该帮助测试的模块。我认为这更好,因为它将使测试完全独立于主要源(甚至不使用其中的 POJOS)。 我不确定这是否可能,所以其他选项会非常有帮助

java maven integration-testing circular-dependency
1个回答
0
投票

因为我无法使用属于另一个测试源的类 模块

这可能是错误的假设。您可以在公共模块中制作附加工件(带有单独的分类器

tests
),您可以将其包含在
test
范围内,其中将包括测试代码。

https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html

https://maven.apache.org/guides/mini/guide-attached-tests.html

© www.soinside.com 2019 - 2024. All rights reserved.