如何在Java Spring引导中模拟RestTemplate?

问题描述 投票:1回答:1

我正在尝试使用下面的代码来模拟RestTemplate getEntity()方法,但是我遇到了异常,并且是单元测试的新手。>

有人可以帮我请问我的错吗?>

班级
public List<SampleObject1> getGitHubUSersList(){

        try {
            ResponseEntity<SampleObject1[]>responseEntity = restTemplate.getForEntity("https://api.github.com/users", SampleObject1[].class);
            List<SampleObject1>arrayLsit  = Arrays.asList(responseEntity.getBody());
            System.out.println("final list is---->"+objectMapperl.writeValueAsString(arrayLsit));
            return arrayLsit;
        }catch (Exception e) {
           e.printStackTrace();
        }
        return null;
    }

测试类

公共类SampleServiceTest1 {

@Mock
RestTemplate mockrestTemplate;

@InjectMocks
@Spy
SampleService1 sampleService;

@Before
public void setup() {
    MockitoAnnotations.initMocks(this);
}

@SuppressWarnings("unchecked")
@Test
public void getGitHubUSersListTest() {

    List<SampleObject1> sampleObject1s = new ArrayList<>();

    SampleObject1 sampoleObject1 = new SampleObject1();
    sampoleObject1.setId(1);
    sampoleObject1.setLogin("sample1");
    sampoleObject1.setNode_id("sample2");
    sampleObject1s.add(sampoleObject1);

    SampleObject1 sampoleObject2 = new SampleObject1();
    sampoleObject2.setId(2);
    sampoleObject2.setLogin("sample3");
    sampoleObject2.setNode_id("sample4");
    sampleObject1s.add(sampoleObject2);

    Mockito.doReturn(sampleObject1s).when(mockrestTemplate).getForEntity(Matchers.anyString(),  ArgumentMatchers.any(Class.class));

    List<SampleObject1> list = sampleService.getGitHubUSersList();

    assertNotNull(list);
}

}

错误
org.mockito.exceptions.misusing.NullInsteadOfMockException: 
Argument passed to when() is null!
Example of correct stubbing:
    doThrow(new RuntimeException()).when(mock).someMethod();
Also, if you use @Mock annotation don't miss initMocks()
    at com.example.microservice.service.SampleServiceTest1.getGitHubUSersListTest(SampleServiceTest1.java:50)

我正在尝试使用下面的代码模拟RestTemplate getEntity()方法,但是我遇到了异常,并且我是单元测试的新手,有人可以帮我请问我错乱的类public List <...>

java mockito resttemplate
1个回答
0
投票

您的模拟设置错误getForEntity不返回List<SampleObject1>,因此您不能将其设置为需要返回ResponseEntity<SampleObject1[]>的返回类型。

因此可以解决您的问题。声明一个新的模拟

@Mock
private ResponseEntity<SampleObject1[]> mockResponseEntity

© www.soinside.com 2019 - 2024. All rights reserved.