Проверьте микросервис с пружинной загрузкой, который необходимо вызвать другой микросервис - PullRequest
0 голосов
/ 03 апреля 2019

Я следовал этому руководству , чтобы создать архитектуру микросервиса электронной коммерции (на французском языке), и сейчас я пытаюсь написать несколько тестов.Моя архитектура состоит из 4 микросервисов с Eureka и Zuul:

  • Микросервис продукта, который здесь для предоставления списка продуктов
  • Микросервис заказа, который будет обрабатывать заказы
  • Микросервис оплаты, который будет обрабатывать платежи
  • Пользовательский интерфейс клиента

Микросервис оплаты должен вызвать микросервис заказов, чтобы проверить, был ли заказ уже оплачен или нет.И это то, что я не могу воспроизвести, чтобы написать модульные тесты.Я хотел бы протестировать этот микросервис без запуска микросервиса заказов.

Как проверить его без запуска микросервиса заказов?

Я уже написал несколько тестов для микросервиса заказов и микросервиса продуктов.

Вот контроллер платежей:

/*
*  Operations to save a payment and notify the orders microservice to update the status of the sayed oreder
**/
@PostMapping(value = "/payment")
public ResponseEntity<Payment>  payAnOrder(@RequestBody Payment payment){

    // We verify if the order has been already payed
    System.out.println("We verify if the order has been already payed");
    Payment existingPayment = paymentDao.findByidOrder(payment.getIdOrder());
    if(existingPayment != null) throw new ExistingPaymentException("This order has already been payed!");

    // We save the payment
    System.out.println("We save the payment");
    Payment newPayment = paymentDao.save(payment);

    // if the DAO return null, there was a problem when saving the payment
    System.out.println("if the DAO return null, there was a problem when saving the payment");
    if(newPayment == null) throw new ImpossiblePaymentException("Error, impossible to establish the payment, retry later!");

    // We retrieve the order corresponding to that payment by calling orders microservice
    System.out.println("We retrieve the order corresponding to that payment by calling orders microservice");
    Optional<OrderBean> orderReq = microserviceOrderProxy.retrieveOneOrder(payment.getIdOrder());

    // orderReq.get() extract the object of type OrderBean from Optional
    System.out.println("orderReq.get() extract the object of type OrderBean from Optional");
    OrderBean order = orderReq.get();

    // We update the object to mak the order as payed
    System.out.println("We update the object to mak the order as payed");
    order.setOrderPayed(true);

    // We send the object updated to the orders microservice to update the order's status
    System.out.println("We send the object updated to the orders microservice to update the order's status");
    microserviceOrderProxy.updateOrder(order);

    // We return 201 CREATED to notify the client that the payment has been registered
    System.out.println("We return 201 CREATED to notify the client that the payment has been registered");
    return new ResponseEntity<Payment>(newPayment, HttpStatus.CREATED);

}

Я заблокирован на этапе, когда мы получаем заказ, соответствующий платежу, потому что он пытается вызвать микросервис заказов, но он не работает!

Вот весь код: https://github.com/kamal951/POC_microservices

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете легко смоделировать другие микросервисы, которые вы вызываете, в своем модульном тесте. В Mockito (который входит в spring-boot-starter-test) вы можете сделать это следующим образом:

public class PaymentControllerTest {

    private PaymentController controller;

    @Mock
    private MicroserviceOrderProxy microserviceOrderProxy;

    ... other mocks here

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        controller = new PaymentController(microserviceOrderProxy, ...);
    }

    @Test
    public void exampleTest() {
        Mockito.when(microserviceOrderProxy.updateOrder(Mockito.any())).thenReturn(--mocked result here--);

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