为什么 Mockito 不返回我的存根返回值?

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

最疯狂的事情 - 我有一个 SpringMVC Junit-5 单元测试器(带有 Mockito)配置为

@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
@TestPropertySource("classpath:application-unit-test.properties)
public class MyTestClass {
 @Autowired MockMvc mockMvc;
 @SpyBean MyImpl myImpl;
 @MockBean MyBean aFewBeansLikeThis;

控制器严重依赖我们的 myImpl Spy,其中也包含我正在测试的方法。

我的测试有一堆 doReturn 语句,然后对端点路径进行 mockMvc.perform(post()) 调用,一切正常,所有测试都通过,地球和平。

但是问题就在这里 - 我刚刚提取了一个方法并将其在 myImpl1 中公开。 然后我为该方法存根了正确的响应,你瞧,测试人员坚持在该 SpyBean 上执行真正的方法,即使我保证它已完全正确配置以返回存根。

我尝试使用 Mockito 的两种返回语法: doReturn(myObj).when(myImpl1).myMethod(); 和 当(myImpl1.myMethod()).thenReturn(myObj);

我在代码中放置了断点,以确保我注入的模拟和间谍实例实际上是正在使用的实例,而且它们确实是

这有点令人沮丧,我记得过去也发生过这种情况,通常会重建项目工作,但这次没有任何帮助。该类中的所有其他存根方法都可以工作,只是新方法不行。

我真的不相信这是一个语法问题,所以我不会用源代码片段使事情变得复杂;只是问一下,SpyBean 中的存根方法是否有任何理由坚持调用真正的方法?

(显然,为了免受监管机构的监管,名称已被更改)

spring-mvc mockito mockmvc
1个回答
0
投票

我从 @Lunivore 注释中的链接找到了答案 - 当您调用需要 String 类型参数的方法时,您必须为这些参数提供非空值。如果要提供 null,则必须为这些参数位置提供 @nullable() 参数类型

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