gpt4 book ai didi

java - 在 Mockito 中匹配可变参数以在重载方法中进行单元测试

转载 作者:行者123 更新时间:2023-11-30 06:18:47 24 4
gpt4 key购买 nike

我无法在 Mockito 中的重载构造函数上模拟可变参数。这是我要测试的方法

@Override
public List<User> fetchDataFromExternalService() {
return Arrays.asList(this.restTemplate.getForObject(URL, User[].class));
}

User 是一个具有属性、getter 和 setter 的 POJO 类。 RestTemplate 实例是 Spring's Rest Template. .

该函数是一个重载函数,有以下方法

1) public <T> T getForObject(java.lang.String url,
java.lang.Class<T> responseType,
java.lang.Object... uriVariables)
throws RestClientException

2) public <T> T getForObject(java.lang.String url,
java.lang.Class<T> responseType,
java.util.Map<java.lang.String,?> uriVariables)
throws RestClientException

我试图模拟第一个函数以返回用户数组,但无论我尝试什么,它总是返回null。我不知道我做错了什么。

我的模拟功能。

User user = new User();
Mockito.when(this.restTemplate.getForObject(
Mockito.anyString(), Mockito.eq(User[].class), (Object[]) Mockito.any())).thenReturn(new User[] {user});

我尝试使用自定义参数匹配器,如下所示,

Mockito.when(this.restTemplate.getForObject(
Mockito.anyString(), Mockito.eq(User[].class),
Mockito.argThat(new MyVarargMatcher()))).thenReturn(new User[] {user});

但它仍然为我返回null

  class MyVarargMatcher implements ArgumentMatcher<Object[]>, VarargMatcher {

@Override
public boolean matches(Object[] argument) {
return true;
}
}

我尝试使用本文中的方法,但该方法已被弃用。

How to properly match varargs in Mockito

https://static.javadoc.io/org.mockito/mockito-core/2.2.7/org/mockito/ArgumentMatchers.html#any()

Maven 配置

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.13.0</version>
<scope>test</scope>
</dependency>

如何解决这个问题?

最佳答案

以下内容对我有用:

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.web.client.RestTemplate;

@RunWith(MockitoJUnitRunner.class)
public class DemoApplicationTests {
@Mock
private RestTemplate restTemplate;
@Test
public void testy() {
Mockito.when(restTemplate.getForObject(Mockito.anyString(), Mockito.any(), (Object) Mockito.any())).thenReturn("this works");
Assert.assertEquals("this works", restTemplate.getForObject("hi", String.class, 42, 45));
}

}

关于java - 在 Mockito 中匹配可变参数以在重载方法中进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48616261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com