тест на интеграцию при начальной загрузке возвращает ноль - PullRequest
0 голосов
/ 06 марта 2019

Я написал простое приложение для весенней загрузки с классами Controller, Service и Business, но при написании интеграционного теста метод макета Service возвращает нуль

MockMainController

@RestController
public class MockMainController {

@Autowired
private MockBusiness mockBusiness;

@GetMapping("request")
public MockOutput mockRequest() {
    return mockBusiness.businessLogic(new MockInput());

      }

  }

MockBusiness

@Service
public class MockBusiness {

@Autowired
private MockService mockService;

public MockOutput businessLogic(MockInput input) {
    return mockService.serviceLogic(input);
    }
}

MockService

@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();

     }

 }

Я пытаюсь издеваться над MockService bean-компонент в контексте приложения с использованием @MockBean

MockControllerTest

@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
     }

 }

В методе теста я создал служебный bean-компонент с использованием @MockBean У меня нетлюбая ошибка здесь, но System.out.println(output); печатает null

1 Ответ

2 голосов
/ 06 марта 2019

Вы получаете null из-за неправильного порядка утверждений в вашем методе тестирования. Сначала вы вызываете метод контроллера, и вы получаете то, что внутри по умолчанию @MockBean, что в данном случае null. Оператор обмена:

MockOutput output = mockMainController.mockRequest(); 

с

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

и вы получите ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...