首页 > 解决方案 > 模拟似乎在进入 lambda 方法时失去了存根

问题描述

我正在尝试测试在我们的一种方法内部运行的一些逻辑(这不是最好的事情,但我的手臂被迫直到可以重构此代码)但是方法的存根列表似乎在特定点丢失了.

processNotification()我的测试方法调用MessageConversionClass.

MessageConversionClass包含一个@Autowired shareClassIdentifierRepostitory(原文如此)字段。

在进入processNotification()时,我的模拟存根在类级别上是可见的:

在此处输入图像描述

但是,有一点在processNotification()它通过 aMap<String, Consumer<Change>> repDrvrChangesMappingMap.ofEntries地方,其中一个条目是以下entry( RedexDefinitions.TRFSRD_ISIN_CD, change -> updateIdentifier(change, "ISIN") )

在此updateIdentifier()方法内部,shareClassIdentifier.findByTypeAndValue调用了但返回 null,因为shareClassIdentifierRepostitory堆栈上的 现已丢失其存根:

在此处输入图像描述

值得注意的一件事是,在条目 lambda 中change传递给的类型是我服务中的内部类,但我不确定这是否重要。updateIdentifier()ChangeMessageConversionClass

有谁知道为什么updateIdentifier()从这个 lambda 方法内部调用会导致shareClassIdentifierRepostitory模拟丢失它的存根?

编辑:

所以我做了更多的挖掘工作,似乎有两个 shareClassIdentifierRepostitory 实例,一个有 4 个存根,一个有 0。它们在测试方法甚至访问服务类之前都可用。

在此处输入图像描述

现在的问题是为什么有两个shareClassIdentifierRepostitory模拟实例被初始化,为什么它会改变?

标签: javajunitmockitointegration-testing

解决方案


推荐阅读