我试图测试一个简单POST Rest调用,但存在NullPointerException。
我的RestController:
@RestController
@RequestMapping("/v1/mail")
@Slf4j
public class EmailForwardController {
@Autowired
EmailForwardConfig emailConfig;
@Autowired
RestTemplate restTemplate;
@PostMapping("/forward")
public ResponseEntity<String> setupEmailForward(@RequestParam String fromEmail, @RequestParam String toEmail, @RequestParam String referenceId) {
log.info("Email Forward: from=" + fromEmail + " to=" + toEmail + " reference=" + referenceId);
String uri = emailConfig.getUrl() + "forward";
JSONObject jsonObject = new JSONObject();
jsonObject.put("from", fromEmail);
jsonObject.put("to", toEmail);
jsonObject.put("clientId", referenceId);
HttpEntity<String> httpEntity = new HttpEntity<>(jsonObject.toJSONString());
ResponseEntity<String> response = restTemplate.postForEntity(uri, httpEntity, String.class);
System.out.println(response); // -> this is null at UNIT Test
if (response.getBody() == null) {
log.error("No response for call!");
return new ResponseEntity<>("Problem!", HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<>(response.getBody(), response.getStatusCode());
}
}
我的单元测试:
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(classes = EmailForward.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class ServiceTest {
@InjectMocks
EmailForwardController emailForwardController;
@Mock
RestTemplate restTemplate;
@Mock
EmailForwardConfig emailConfig;
@Before
public void setup() {
}
@Test
public void test_forward_ok() {
assertNotNull(restTemplate);
assertNotNull(emailForwardController);
// System.out.println(Mockito.verify(restTemplate).postForEntity(any(), any(), any()));
Mockito.when(restTemplate.postForEntity(any(), any(), any())).thenReturn(new ResponseEntity<>("done", HttpStatus.OK));
ResponseEntity<String> responseEntity = emailForwardController.setupEmailForward("test", "test", "test");
assertNotNull(responseEntity);
assertNotNull(responseEntity.getStatusCode());
assertNotNull(responseEntity.getBody());
assertEquals(responseEntity.getBody(), "Done");
assertEquals(responseEntity.getStatusCode(), HttpStatus.OK);
}
}
由于以下错误,此测试失败:NullPointerException,确切地说,response ResponseEntity对象为Null。
verify输出将执行以下操作:
Wanted but not invoked:
restTemplate.postForEntity(
<any>,
<any>,
<any>
);
-> at xx.xxx.ms.oauth2.ServiceTest.test_forward_ok(ServiceTest.java:42)
Actually, there were zero interactions with this mock.
知道为什么响应是空的吗?我为测试使用了正确的注释,因此应该注入模拟。也许我在这里遗漏了一些重要的东西,因为如果我删除@mock EmailForwardConfig emailconfig;
这个对象在RESTController中是空的。我觉得我忘记了什么,但我想不出来。
您对RestTemplate.PostForEntity的嘲弄是不正确的。
将您得嘲讽更改为:
Mockito.when(restTemplate.postForEntity(any(), any(), any())).thenReturn(new ResponseEntity<>("done", HttpStatus.OK));
致:
Mockito.when(restTemplate.postForEntity(anyString(),any(),
any(Class.class))).thenReturn(new ResponseEntity<>("done", HttpStatus.OK));
我试图模仿REST模板。通过mockito返回exchange方法,但无论我通过mock返回什么,它总是返回空值,即使我抛出异常: 这是实际代码: mockito代码: 在交换模拟中,每个参数都是ArgumentMatcher类型,mockLovList()返回一个LOV列表 它应该返回我嘲笑的任何东西,但它总是返回null
我在遵循at spring网站的创业指南https://spring.io/guides/gs/consuming-rest/. 我没有遵循确切的教程,因为我正在使用另一个endpoint:http://www.omdbapi.com?s=rush. 我在将JSON转换为POJO时遇到了问题。我没有收到任何错误或异常。有人能指出我哪里做错了吗? 您可以在此处找到完整的代码 这是我的POJO: 这是
我有两个活动和两个布局。当我在第一个活动中显示列表时,一切都正常,并在单击时给出列表中项目的编号,但当我尝试在第二个活动中重复相同的内容时,它会告诉我RecycleServiceClickListener侦听器为空。 适配器: 第一项活动: 第二项活动: 错误: 我不明白为什么在第一种情况下,它正常处理单击,而在第二种情况下,它说RecyclerViewClickListener为null
我正在尝试对服务类进行单元测试,但模拟返回null 在上面的代码中,当调用到达服务类时为空。我不知道我是否错过了什么。我尝试使用和运行,但结果相同。感谢任何帮助。 提前谢谢你。
问题内容: 说我有一些Java代码: 还有一些代码可以加载: 能永远?为什么/为什么不呢?如果是这样,在什么情况下? 问题答案: 根据此方法javadoc: 返回该类的类加载器。一些实现可能使用null来表示引导类加载器。如果此类是由bootstrap类加载器加载的,则此方法在此类实现中将返回null。
你能告诉我如何只对某些代码块运行事务吗?我有@Transactional的服务函数,并从它们调用存储库函数,在那里执行查询。但当查询失败时,由于事务必须结束,服务功能也随之失效。那么,当存储库函数失败时,如何返回null值呢?我需要在失败时捕获空值,并继续一些逻辑。我的代码: 我尝试了@davidxxx的答案,得到了这个错误: