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

从JUnit和Mockito中的另一个公共类中获取最终类方法的存根

翟高明
2023-03-14

我需要在其他公共类方法中存根最后一个类方法。在我的场景中,我有一个类名ElasticIntegration,它是公共类。有一种方法称为licenseCheckOut

public Response licenseCheckOut(String jsonObj) {
    LogResource logData = new LogResource();
    try {
        LicenseServiceImpl licenseCheck = new LicenseServiceImpl();
        JSONObject queryObj = new JSONObject(jsonObj);
        int licenseId = -1;         
        Properties configProperties = Utilities.getConfigProperties();      
        Utilities.verifykeycloakToken(queryObj, configProperties);
        String userName = userAuth.getUserInfo(queryObj,configProperties);
        if(userName !=null){
            licenseId = licenseCheck.checkoutLicense(userName);
        }
        String result = "{\"licenseid\": "+ licenseId +"}";
        return Response.ok(result).build();
    } catch (Exception ex) {
        LogDetail details = Utilities.constructDetails("licenseCheckOut", ex);
        logData.writeLogMessage(null, details);
        return Response.serverError().entity(details).build();
    }
}

在licenseCheckOut方法中,有验证fykeyCloakToken是我们需要存根的方法。实用程序类是最后一个类。

如果您检查与上述图像参考的连接是否正确。connect()我们得到了错误信息。所以我在类中插入when()。然后返回()

    Utilities util = new Utilities();
    Utilities mock = mock(Utilities.class);
    JSONObject queryObj = new JSONObject(jsonObj);
    Properties mapProperties = null ;
    when(mock.verifykeycloakToken(queryObj, mapProperties)).thenReturn(true);

我在这里遇到的错误是

组织。莫基托。例外情况。基础MockitoException:无法模拟/间谍类com。项目实用程序Mockito无法模拟/间谍,因为:-ElasticIntegrationTest的最后一个类。licenseCheckOut\u VerifyKeyCoveToken\u应返回SuccessBuild(ElasticIntegrationTest.java:51)

共有1个答案

上官修文
2023-03-14

Utilities类中的verifykeydovetoken方法是一个静态方法。

要模拟此情况,您可以探索以下选项:

  • 模拟函数中的所有内容。在您的例子中,这似乎不难做到,因为您正在创建newurl()对象,而mockito无法处理该对象
  • 使用powermockito,因为mocktio本身无法处理静态模拟

注:使用powermock通常是不受欢迎的,尤其是当您遵循TDD时。但在处理遗留代码时,它确实起到了拯救作用。

 类似资料:
  • 我正在使用PowerMockito为一个类编写junit。我可以模拟私有方法,但无法模拟另一个类的公共方法。在下面的测试类中,B的对象没有被模仿。我做错了什么? 另一个具有所有公共方法的类B 现在我有A班的考级 下面是我使用的依赖关系-

  • 我有一个Staff类,其中包含特定工作人员的角色列表。我还有staffList,它保存staff对象。 如果我只是使用get索引直接从rolesList中获取值,它将不会显示任何问题。 我认为它得到的是rolesList的一个版本,但不是那个特定的Staff对象中的版本 我已经在roleList中创建了一个新的Staff成员和一个角色,然后在构造Staff对象时使用了列表,因此使用该对象的getR

  • 我的Java包中有四个类。只有一个类具有方法。 当我运行方法时,我如何运行这四个类中的所有方法? 以下是我的课程: 第一类。JAVA 第二类。爪哇 第三类。JAVA 样品。JAVA

  • 问题内容: 我需要一个小的Container-Class来存储一些不可变的字符串。由于String本身是不可变的类型,所以我想到了这样的东西: 许多人似乎完全反对使用公共字段,而是使用Getters。恕我直言,在这种情况下,这只是样板,因为String本身是不可变的。 我可能对这个还有其他想法吗? 问题答案: 我会做您认为最简单明了的事情。如果您有一个仅由有限数量的类使用的数据值类。esp包本地类

  • 我有很多面板。第一个包含一个JTextField,用于获取玩家的用户名 当您输入文本时,您将被重定向到另一个面板,我想在其中显示以下消息“Hello*由于JTextfield从第一个面板获得的用户名”,让我们玩一个游戏。 我在第二个JPanel的类中编写了以下代码(ifThereUsername函数只是用来表示是否有文本)。但是,用户名没有显示,我只是阅读了消息的其余部分 字体getUsernam

  • 我正在Eclipse中用Java编写一个程序。我有两个从超级类ViewPart扩展的类。现在我只想自动打开其中一个类(这意味着当我运行程序时),另一个类应该通过第一个类的UI上的按钮打开。但我不知道如何手动打开ViewPart类。 我现在试过了