java - Mockito - 仅针对特定参数的模拟方法调用
问题描述
我想模拟特定参数的方法调用并为其他参数调用真实方法。我有:
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@SpringBootTest(classes = AppConfig.class)
@ActiveProfiles("mvntest")
public class OKMMoveMergeTest {
@MockBean
private FolderDAO folderDAO;
...
@Test
public void callDocCreateEp() throws Exception {
Mockito.doCallRealMethod().when(folderDAO).getFoldersHierarchy(any(EHierarchyType.class));
Mockito.doReturn(screwedHierarchy).when(folderDAO).getFoldersHierarchy(EHierarchyType.CLIENT_DOC);
...
}
}
有了这个,我得到了嘲笑的结果,folderDAO.getFoldersHierarchy(EHierarchyType.CLIENT_DOC)
但是当我尝试用我得到的任何其他参数调用它时NullPointerException
那么我做错了什么或者我应该如何为特定参数存根方法调用?
junit-jupiter-api: 5.4.0
junit-jupiter-engine: 5.4.0
spring-boot:2.1.4.RELEASE mockito-junit-jupiter:2.23.0
解决方案
您需要为您的 bean 创建一个 Spy 而不是 Mock。您可以使用 @SpyBean 注释。这将创建一个 Spy 并将其放入上下文中,就像 @MockBean 一样。在 Spy 的情况下,您将在其后面有一个真实的对象,但您仍然可以在需要时覆盖该行为,就像您有一个模拟一样。示例见以下文章
推荐阅读
- typescript - 当涉及到 TypeScript 时,webpack 配置函数的类型是什么?
- c++ - C ++中的名称和变量有什么区别
- api - 如何找到基本网址?
- python - PySide2 接收者签名
- python - 如何在服务器上上传文件?
- c# - 如何在 Hololens 的背景上加载字节数组
- javascript - React 和 Typescript,警告:React.createElement:类型无效 - 期望字符串但得到:未定义
- python - 运行 manage.py 命令时如何解决回溯问题?
- flutter - 我怎样才能使这种类型的滑块颤动?
- python - 如何将 ploygon.io REST API 数据带入数据框