当前位置: 首页 > 知识库问答 >
问题:

仅用于特定参数的Mockito-mock方法调用

何玺
2023-03-14

我想模拟特定参数的方法调用并为其他参数调用真正的方法。我有:

@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\u DOC)但是当我尝试用任何其他参数调用它时,我得到了NullPointerException

那么,我做错了什么,或者应该如何只针对特定参数存根方法调用呢?

junit-jupiter api: 5.4.0

junit-jupiter引擎:5.4.0

Spring防尘套:2.1.4。发布mockito junit jupiter:2.23.0

共有1个答案

景正文
2023-03-14

您需要为您的bean而不是Mock创建一个Spy。您可以使用@SpyBean注释。这将创建一个Spy并以与@MockBean相同的方式将其放入上下文中。在Spy的情况下,您将在它后面有一个真实的对象,但如果需要,您仍然可以覆盖该行为,就像您有一个mock一样。有关示例,请参阅以下文章

 类似资料:
  • 我想通过模拟class的重写方法a1方法2来测试我的服务。我不想更改课程A1和B1中的任何内容。我使用的是mockito 1.9.0和powermockito 1.4.12。我正在尝试以下代码: UnitTestService类: 服务级别: A1类: B1级: 我正在eclipse中使用testNG运行类UnitTestService。在这里,B1类a1Method2中的实际方法在控制台中打印“

  • 问题内容: 我正在使用Mockito 1.9.0。我将如何验证某个方法仅被调用一次,并且传递给它的字段之一包含某个值?在我的JUnit测试中, 方法“工作”调用方法“ m_orderSvc”(传递给对象的参数之一)。“ m_orderSvc”又包含一个成员字段“ m_contractsDao”。我想验证“ m_contractsDao.save”是否被调用一次,并且传递给它的参数包含某个值。 这可

  • 是否可以在使用非预定义参数调用模拟时引发异常?有答案。返回\u SMART\u null,但这并不是我真正需要的,因为如果null是合法的返回值,它就不起作用,这不会导致NullPointerException,而是以后出错。 编辑:一些背景。因此,在Mockito中,当您定义一个mock时,您可以如下所示为每个调用指定返回值: 当<代码>myMock时。someMethod是用参数调用的,我在测

  • 我刚开始使用Mockito,我正在验证某个方法应该用特定的参数调用,而所有的值类型参数(int、String、enum等)都可以验证,但引用/类类型参数似乎没有,下面是一个示例 那么,我如何将引用对象传递到我的输入方法中,并在这里将其模拟为我的内部方法的返回值呢?顺便说一句,如果我的方法只包含值类型参数,它将工作...

  • 我在类中有一个签名为的方法。 我有一个调用方法的代码块: 如果我想测试databaseService.save(user)没有被调用,那么我如何用Mockito(3.3.3版)来做呢?

  • 不幸的是: TweetServiceTest.java Hibernateutil.java