java - 模拟外部服务返回 null

标签 java unit-testing mockito junit4

我得到了非常简单的 Dictionary 类,可以调用外部 API。

 public class Dictionary {
        protected ExternalService service = new ExternalService();       

        public String getValue(String key, String dictionaryName) {
            ExternalServiceInput input = new ExternalServiceInput();
            ExternalServiceOutput output = new ExternalServiceOutput();

            input.setKey(key);
            input.setDictionaryName(dictionaryName);

            try {
                output = service.invoke(input);
            } catch (Exception e) {         
                return null;
            }       

            return output.getValue();       
        }
    }

它工作得很好,但我想为此编写单元测试,所以我决定需要模拟 service.invoke()

    @Mock   
    private ExternalService service;        

    @InjectMocks
    private Dictionary dictionary;      
    @InjectMocks
    private ExternalServiceOutput output;
    @InjectMocks
    private ExternalServiceInput input;


    @Before
    public void setUp() throws Exception {      
        MockitoAnnotations.initMocks(this);

        input.setKey("testKey");
        input.setDictionaryName("testDictionary");  
        output.setValue("testValue");           
    }

    @Test
    public void shouldReturnValue() throws Exception {
        when(service.invoke(input)).thenReturn(output);     
        assertEquals(output.getValue(), dictionary.getValue(input.getKey(), input.getDictionaryName()));        
    }

我尝试使用InputOutput作为常规字段或在setUp方法中初始化它,一切都以NullPointerException结束 位于 Dictionary 类,位于

return output.getValue();

有人可以指出我做错了什么吗?

最佳答案

您应该在您的ExternalServiceInput类中重写equals和hashCode,或者更改您的模拟以接受ExternalServiceInput的任何对象

when(service.invoke(Mockito.any(ExternalServiceInput.class))).thenReturn(output);

关于java - 模拟外部服务返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52762836/

相关文章:

java - 尝试并发现范围问题

java - 通过消息队列进行序列化和反序列化

java - 将参数传递到函数接口(interface)的 ArgumentCaptor 中

java - JDWP 退出错误 JVMTI_ERROR_WRONG_PHASE(112)

java - 访问泛型类成员的方法期间出现 ClassCastException

java - org.springframework.boot.test.mock.mockito.MockReset 上的 NoClassDefFoundError

javascript - jest.mock 中的 Jest 'TypeError: is not a function'

java - 如何在 Spring Controller 中模拟用户,并在某些内容丢失或未模拟时进行调试?

java - 如何模拟 someObj.meth1(...).meth2(...)?

java - Mockito - 如何避免将数据插入数据库?