更新
奇怪的是,当我在控制器中设置String token = ""
而不是String token = null
时,测试通过了。
Mokito返回默认值null
而不是OK
字符串。所以我的测试失败了。
Caused by: java.lang.NullPointerException: Cannot invoke "String.toLowerCase()" because "result" is null
字符串
我的测试方法:
@WebMvcTest(ClusterController.class)
class ClusterControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private ClusterService clusterService;
@MockBean
private ClusterRestService clusterRestService;
@Test
void testPatchTestClusterVM() throws Exception {
//Given
when(clusterService.startPatchingTest(any(), anyString(), anyString(), anyString())).thenReturn("OK");
//When
RequestBuilder request = MockMvcRequestBuilders
.post("/patch/clustertest/mycluster/host/vc2crtp1770461np")
.accept(MediaType.APPLICATION_JSON);
//Then
mockMvc.perform(request)
.andExpect(status().isOk())
.andReturn();
}
型
我的控制器方法:
@PostMapping("/patch/clustertest/{clustername}/host/{hostname}")
public ResponseEntity<?> patchClusterTestVM(@PathVariable("clustername") String clusterName, @PathVariable("hostname") String hostName) {
String token = null;
String uuid = UUID.randomUUID().toString();
String result = clusterService.startPatchingTest(new ClusterDetailsClass(1L, "mycluster"), hostName, token, uuid);
return new ResponseEntity<String>(result.toLowerCase(), HttpStatus.OK);
}
型
应用测试:
@SpringBootTest
class MyApplicationTests {
@Test
void contextLoads() {
}
}
型
3条答案
按热度按时间zfycwa2u1#
ArgumentMatchers#anyString匹配任何非空字符串,因此以下存根仅适用于非空令牌:
字符串
这就解释了为什么Mockito只在token为非null(例如空字符串)时返回“OK”。如果token为
null
,则参数不匹配,导致Mockito返回默认值(null
)。如果您使用的是Mockito 2.1.0或更高版本,则应使用
nullable(String.class)
来匹配可空字符串,如here所述,否则应使用any()
。a11xaf1n2#
返回一个String而不是ResponseEntity。
尝试
字符串
cl25kdpy3#
你没有展示所有相关的代码,比如测试类注解以及如何初始化和注入clusterservice。我认为这应该可以工作:
字符串