gpt4 book ai didi

java - 模拟外部服务返回 null

转载 作者:行者123 更新时间:2023-12-02 01:52:35 25 4
gpt4 key购买 nike

我得到了非常简单的 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/

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