← Назад к вопросам

Unit Testing: Написать тесты для сервиса заказов

2.0 Middle🔥 111 комментариев
#Тестирование

Условие

Дан сервис обработки заказов:

public class OrderService { private readonly IOrderRepository _repository; private readonly IPaymentGateway _paymentGateway; private readonly IEmailService _emailService;

public async Task<OrderResult> ProcessOrderAsync(Order order)
{
    if (order.Items.Count == 0)
        throw new InvalidOrderException("Order has no items");

    var total = order.Items.Sum(i => i.Price * i.Quantity);
    
    var paymentResult = await _paymentGateway.ChargeAsync(order.CustomerId, total);
    if (!paymentResult.Success)
        return OrderResult.PaymentFailed(paymentResult.Error);

    order.Status = OrderStatus.Paid;
    await _repository.SaveAsync(order);
    
    await _emailService.SendOrderConfirmationAsync(order.CustomerEmail, order.Id);
    
    return OrderResult.Success(order.Id);
}

}

Задание: Написать unit-тесты, покрывающие:

  1. Успешный сценарий обработки заказа
  2. Заказ без товаров
  3. Ошибка оплаты
  4. Проверка, что email отправляется только после успешной оплаты

Требования:

  • Использовать xUnit/NUnit и Moq/NSubstitute
  • Следовать паттерну Arrange-Act-Assert
  • Изолировать зависимости через моки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение уже было отправлено

Решение для Unit Testing с xUnit и Moq содержит:

  1. Успешный сценарий — ProcessOrderAsync_WithValidOrder_ReturnsSuccess
  2. Заказ без товаров — ProcessOrderAsync_WithEmptyItems_ThrowsInvalidOrderException
  3. Ошибка оплаты — ProcessOrderAsync_WhenPaymentFails_ReturnsFailureResult
  4. Email отправляется корректно — ProcessOrderAsync_SendsEmailOnlyAfterSuccessfulPayment
  5. Email не отправляется при ошибке — ProcessOrderAsync_DoesNotSendEmail_WhenPaymentFails
  6. Корректный расчёт суммы — ProcessOrderAsync_CalculatesTotalCorrectly (Theory test)

Покрытие:

  • Arrange-Act-Assert паттерн
  • Изолированные моки для всех зависимостей
  • Проверка вызова методов через Verify
  • Theory tests для граничных случаев
Unit Testing: Написать тесты для сервиса заказов | PrepBro