【问题标题】:Mock call to static method of a utility class模拟调用实用程序类的静态方法
【发布时间】:2019-04-20 12:23:12
【问题描述】:

我需要为方法processNotification 编写单元测试。但是这个方法内部调用JsonUtility.getNotificationDTOFromMessage

调用时我需要返回值为null。我们如何使用 Mockito 实现这一目标?

我无法更改代码,因为它不属于我。

@Override
public void processNotification(String message) throws IOException {
    logger.info(" Processing the notifications");
    NotificationDTO notification = 
    JsonUtility.getNotificationDTOFromMessage(message);
    if (null == notification) {

【问题讨论】:

  • 你尝试过什么,它到底有什么问题?你读过例如stackoverflow.com/questions/21105403/…?另请注意,null == notification 是“尤达条件”。
  • 你不能。 Mockito 不能模拟静态方法。

标签: java unit-testing junit mockito


【解决方案1】:

您不能使用 Mockito 模拟静态方法。如果您需要模拟静态方法,请尝试使用 PowerMockito

例如:PowerMockito.mockStatic(JsonUtility.class);

【讨论】:

    【解决方案2】:

    你不能使用 mockito 来模拟静态方法。但是如果可能的话,你可以操纵你的输入数据,这样它就会进入静态方法并返回你想要的值。如果可能的话,你可以从你的测试方法中传递 message = null .这样你就可以测试你的方法了。

    【讨论】:

      【解决方案3】:

      现在更新版本的 Mockito 支持静态方法模拟。 无需使用 PowerMockito 只需将您的版本升级到 3.4.0 +

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-23
        • 1970-01-01
        • 2017-10-08
        相关资源
        最近更新 更多