Использование @RestClientTest в весеннем загрузочном тесте - PullRequest
0 голосов
/ 30 января 2019

Я хочу написать простой тест, используя @RestClientTest для компонента ниже ( ПРИМЕЧАНИЕ: Я могу сделать это без использования @RestClientTest и зависимых от насмешивания bean-компонентов, которые отлично работают.).

@Slf4j
@Component
@RequiredArgsConstructor
public class NotificationSender {

    private final ApplicationSettings settings;
    private final RestTemplate restTemplate;

    public ResponseEntity<String> sendNotification(UserNotification userNotification)
            throws URISyntaxException {
            // Some modifications to request message as required
            return restTemplate.exchange(new RequestEntity<>(userNotification, HttpMethod.POST, new URI(settings.getNotificationUrl())), String.class);
    }
}

И тест;

@RunWith(SpringRunner.class)
@RestClientTest(NotificationSender.class)
@ActiveProfiles("local-test")
public class NotificationSenderTest {

    @MockBean
    private ApplicationSettings settings;
    @Autowired
    private MockRestServiceServer server;
    @Autowired
    private NotificationSender messageSender;

    @Test
    public void testSendNotification() throws Exception {
        String url = "/test/notification";
        UserNotification userNotification = buildDummyUserNotification();
        when(settings.getNotificationUrl()).thenReturn(url);
        this.server.expect(requestTo(url)).andRespond(withSuccess());

        ResponseEntity<String> response = messageSender.sendNotification(userNotification );

        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
    }

    private UserNotification buildDummyUserNotification() {
     // Build and return a sample message
    }
}

Но я получаю ошибку, что No qualifying bean of type 'org.springframework.web.client.RestTemplate' available.Что, конечно, правильно, так как я не издевался над ним или не использовал @ContextConfiguration для его загрузки.

Разве @RestClientTest не настраивает RestTemplate?или я неправильно понял?

1 Ответ

0 голосов
/ 30 января 2019

Нашли это!Так как я использовал боб, которому вводили RestTemplate напрямую, мы должны добавить @AutoConfigureWebClient(registerRestTemplate = true) к тесту, который это решает.

Это было в javadoc @RestClientTest, который я, кажется, проигнорировалранее.

Успешный тест;

@RunWith(SpringRunner.class)
@RestClientTest(NotificationSender.class)
@ActiveProfiles("local-test")
@AutoConfigureWebClient(registerRestTemplate = true)
public class NotificationSenderTest {

    @MockBean
    private ApplicationSettings settings;
    @Autowired
    private MockRestServiceServer server;
    @Autowired
    private NotificationSender messageSender;

    @Test
    public void testSendNotification() throws Exception {
        String url = "/test/notification";
        UserNotification userNotification = buildDummyUserNotification();
        when(settings.getNotificationUrl()).thenReturn(url);
        this.server.expect(requestTo(url)).andRespond(withSuccess());

        ResponseEntity<String> response = messageSender.sendNotification(userNotification );

        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
    }

    private UserNotification buildDummyUserNotification() {
     // Build and return a sample message
    }
}
...