"Recursive update"在模拟Micronaut单元测试的课程时



我正在为我的应用程序构建单元测试,并遇到我没有解释的循环依赖问题。

我的应用程序的细节 - 它使用一些@Context豆子,@PostConstruct生成一些线程的函数。 正因为如此,我不希望它们在我的单元测试中,所以我正在取消以下方法- 创建一个@Replaces子类,也覆盖正在执行@PostConstruct的函数(否则它仍然会触发未损坏的线程生成)。

您 (I) 不能在 Bean 上使用@Context@MockBean - 它们仍在初始化... 我也在用@MockBean嘲笑另一个豆子,此时问题开始了 - 我现在遇到了某种循环依赖问题:

Message: Recursive update
Path Taken: MockHandler.senderService --> SenderService.apiClient --> WithContextMockTest.toBeTestedClass --> ToBeTestedClass.apiClient
at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1174)

我在这里创建了一个最小的构建来重复这个问题: https://github.com/Aziris/MicronautRecursiveUpdate

我看不出为什么有链接SenderService.apiClient --> WithContextMockTest.toBeTestedClass,因为"apiClient"(例如类RestClient)没有依赖关系。

如果我取消了我的@Context类(使其成为常规@Singleton豆),这个问题不再出现。 我怀疑一定有更好的方法来嘲笑@Context豆,但我不知道还有更多选择。

任何想法在示例项目中有什么可怕的错误?

我现在对我自己的问题有一个答案,但我不确定是否有办法以不同的方式解决它。

这个特定问题的一个答案是 - 定义接口并按接口注入,而不是按类名注入。

我想知道按类注射是非法的还是只是在 Micronaut 处理中存在一些错误? 如果您注入类,应用程序本身也运行良好,只有@MicronautTest测试类才会遇到麻烦。

最新更新