使用带有泛型参数的mockito和Junit测试void方法

ne5o7dgx  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(115)

我正在尝试使用mockito和junit测试一个void方法(该方法包含一个泛型参数)。我想使用doNothing()为这个方法,但运行后,测试将返回异常的方法与泛型参数和其他没有泛型参数,它的工作;
成功和错误的区别在于:我们用final来定义success方法,而不是error方法
例外情况:例外1:
不能在验证或验证之外使用参数匹配器。正确使用参数匹配器的示例:when(mock.get(anyInt().thenReturn(null); System. out. println(). println(); verify(mock).someMethod(contains(“foo”))
此外,这个错误可能会出现,因为你使用的参数匹配器的方法不能被模仿。以下方法 * 不能 * 被存根/验证:final/private/equals()/hashCode()。不支持在非公共父类上声明的Mocking方法。

Method to tests :
    
    public class GreenWork {
           @Autowired 
           Service service;
           public void getDataResponses() {
        
            ResponseEntity<DataDTO> responseEntity = restTemplate.exchange(
                            settings.getUrk(),
                            HttpMethod.GET,
                            null,
                            DataDTO.class);
            
            if (responseEntity.getStatusCode().is4xxClientError()) {
                ErrorData errorData = new ErrorData();
                errorData.setMessage("error loading");
                service.error("corId", errorData, "otherId");
            } else {
                service.success("corId", responseEntity.getBody(), "otherId");
            }
       }
    }
       
    **Service.java**
    public final void success(
            final String corId,
            final T t, // Generic class
            final String otherud)
            throws Exception {
        
        ......
        restTemplate.exchange(
            "url"),
            entity,
            Void.class);
    }
    
    
      public void error(
            final String corId,
            final ErrorData errorData,
            final String otherud)
            throws Exception {
        
        ......
        restTemplate.exchange(
            "url"),
            entity,
            Void.class);
    }
        
    My Junit tests :
        @InjectMocks
        private GreenWork greenWork;
        
    @Test
    public void shoulSuccessCallbak() {
        doNothing().when(service).success(anyString(), any(), anyString());  // Throw an exception Exception 1
        doNothing().when(service).success(anyString(), any(GrayDTO.class), anyString()); // With this I got also the same Exception
        doNothing().when(service).error("corId", any(ErrorData.class), "xId");  // No error no exception .. Work 
        greenWork.getDataResponses();
    }
hjzp0vay

hjzp0vay1#

从服务中删除final修改器

public final void success()

public void success()

相关问题