Spring 启动集成测试模拟方法返回 null



我用ControllerServiceBusiness类编写了简单的 Spring 启动应用程序,但在编写集成测试时,Service的模拟方法返回 null

模拟主控制器

@RestController
public class MockMainController {
@Autowired
private MockBusiness mockBusiness;
@GetMapping("request")
public MockOutput mockRequest() {
return mockBusiness.businessLogic(new MockInput());
}
}

模拟商业

@Service
public class MockBusiness {
@Autowired
private MockService mockService;
public MockOutput businessLogic(MockInput input) {
return mockService.serviceLogic(input);
}
}

模拟服务

@Service
public class MockService {
@Autowired
private MockUtil mockUtil;
public MockOutput serviceLogic(MockInput input) {
mockUtil.exchange(UriComponentsBuilder.fromUriString(" "), HttpMethod.GET, HttpEntity.EMPTY,
new ParameterizedTypeReference<MockOutput>() {
});
return new MockOutput();
}
}

我正在尝试使用@MockBean在应用程序上下文中模拟MockServicebean

模拟控制器测试

@SpringBootTest
@ActiveProfiles("test")
@Profile("test")
@RunWith(SpringJUnit4ClassRunner.class)
public class MockControllerTest {
@Autowired
private MockMainController mockMainController;
@MockBean
private MockService mockService;
@Test
public void controllerTest() {
MockOutput output = mockMainController.mockRequest();
given(this.mockService.serviceLogic(ArgumentMatchers.any(MockInput.class)))
.willReturn(new MockOutput("hello", "success"));
System.out.println(output);    //null
}
}

在测试方法中,我使用@MockBean创建了模拟服务 bean,我在这里没有任何错误,但System.out.println(output);打印null

由于测试方法中的语句顺序错误,您正在null。您首先调用控制器方法,然后获得默认@MockBean中的内容,在本例中为null.掉期语句:

MockOutput output = mockMainController.mockRequest(); 

given(this.mockService.serviceLogic(ArgumentMatchers.any(MockInput.class)))
.willReturn(new MockOutput("hello", "success")); 

你会得到预期的结果。

最新更新