[英]Mocked Rest template is returning a null response
我是springboot中JUnit5和Mockito框架的新手。 在这里,我试图模拟 RestTemplate 并返回带有字符串响应的 200 状态。 但是我收到了 null 响应,并且 function 引发了 Null 指针异常。 我是mocking rest模板的方式有什么错误吗?
服务
public class Abc {
@Autowired
RestTemplate template;
@Value("${ser.url}")
String url;
void validate(String val){
ResponseEntity<String> response;
try{
response = template.postForEntity(url, HTTP_ENTITY, String.class);
} catch(Exception ex ){
.....
}
sysout(response); //Prints Null
String res = response.getBody(); //Null Pointer exception
}
}
测试
class ServiceTest {
@InjectMocks
Abc abc;
@Mock
RestTemplate template;
@BeforeEach
void setup(){
MockitoAnnotations.init(this);
}
@Test
void testIt(){
when(template.postForEntity(anyString(), any(), ArgumentMatchers.<Class<String>>any())).
thenReturn(new ResponseEntity<String>("value",HttpStatus.OK));
abc.validate("abc");
}
}
经过过去长时间的实验,我意识到@InjectMocks 有时无法按预期工作。 所以现在我改用@MockBean。 此代码有效:
@Service
public class Abc {
@Autowired
RestTemplate template;
@Value("${ser.url}")
String url;
void validate(String val){
ResponseEntity<String> response = null;
try{
response = template.postForEntity(url, new HttpEntity<>(""),
String.class);
} catch(Exception ex ){
ex.printStackTrace();
}
System.out.println(response); //Prints Null
String res = response.getBody(); //Null Pointer exception
}
}
@SpringBootTest
class AbcTest {
@Autowired
Abc abc;
@MockBean
RestTemplate template;
@Test
void testIt(){
when(template.postForEntity(anyString(), any(), ArgumentMatchers.<Class<String>>any())).
thenReturn(new ResponseEntity<String>("value", HttpStatus.OK));
abc.validate("abc");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.