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

模棱两可的方法调用模仿resttemplate.exchange()

哈雅珺
2023-03-14

无法找出正确的方法来使用匹配器来识别我要处理的exchange方法的重载。我正在打的电话:

import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import static org.junit.Assert.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.*;

共有1个答案

卢阳泽
2023-03-14

我不确定我是否误解了您的问题或@marciejkowalski提到的问题,但当从问题或我认为类似于您对mockito-core-2.23.4/JDK 1.8.0_151的示例运行测试时,它工作得很好。

[我在您的示例中使用了JUnit4,而不是JUnit5]

import static org.mockito.ArgumentMatchers.any;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {

    @Test
    public void test() {

        RestTemplate api = Mockito.mock(RestTemplate.class);
        ResponseEntity<?> response1 = Mockito.mock(ResponseEntity.class);
        ResponseEntity<?> response2 = Mockito.mock(ResponseEntity.class);

        Mockito.when(api.exchange(any(String.class), any(HttpMethod.class), any(HttpEntity.class), any(Class.class))).thenReturn(response1);
        Mockito.when(api.exchange(any(String.class), any(HttpMethod.class), any(HttpEntity.class), any(ParameterizedTypeReference.class))).thenReturn(response2);

        ParameterizedTypeReference mock = Mockito.mock(ParameterizedTypeReference.class);

        Assert.assertEquals(response1, api.exchange("", HttpMethod.GET, new HttpEntity(""), String.class));
        Assert.assertEquals(response2, api.exchange("", HttpMethod.GET, new HttpEntity(""), mock));
    }
}
 类似资料:
  • 但是,当我尝试相同的示例时,通过将Integer更改为Object,代码编译得很好,输出为String 谁能帮助我理解为什么当输出来自其中有字符串的方法时,签名中有对象的方法是必需的。以及类型错误不明确的原因是什么。

  • 我应该如何编写以下Mockito匹配器,以便调用不会有歧义? 我试图在代码中模拟的实际函数调用是:

  • 问题内容: 我有一个公共抽象类,并且我正在尝试使用该方法,因为我需要扩展我的抽象类的类中的信息。一个例子是这样的: 但是,IntelliJ报告此: 代码可以正常运行,但是以我的方式来说,在我的IDE中包含数十个错误警告是有点。误报会打乱我的工作流程。 为什么显示这些错误,我该怎么做才能看不到它们? 问题答案: 代码很好,但是在IntelliJ中是错误。 错误报告, 另一份。 甚至还有更多错误报告,

  • 问题内容: public class Primitive { void m(Number b, Number … a) {} // widening, autoboxing->widening->varargs 我已经搜索过,发现加宽优先级比拆箱优先,因此在上述方法调用中,应该调用第一个方法,因为两个参数都相同。但这不会发生。你能解释一下吗? 问题答案: 它无法在JDK 1.5、1.6和1.7中进

  • 谁能解释为什么我在代码后面得到“对'end'的引用是模棱两可的”?我明白这是因为与STD::END发生冲突。但是如果我把结束放在主函数中,它不会显示错误。在全局范围内定义与在主函数范围内定义有何不同?

  • 问题内容: Executors.newFixedThreadPool(3).submit(() -> {doSmth();}); “模棱两可的方法调用。在ExecutorService中提交(可调用)和在ExecutorService中提交(可运行)都匹配。” 如何解决?我知道我可以使用匿名类,但我想使用Function。 问题答案: Executors.newFixedThreadPool(3)