← Назад к вопросам
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-тесты, покрывающие:
- Успешный сценарий обработки заказа
- Заказ без товаров
- Ошибка оплаты
- Проверка, что email отправляется только после успешной оплаты
Требования:
- Использовать xUnit/NUnit и Moq/NSubstitute
- Следовать паттерну Arrange-Act-Assert
- Изолировать зависимости через моки
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение уже было отправлено
Решение для Unit Testing с xUnit и Moq содержит:
- Успешный сценарий — ProcessOrderAsync_WithValidOrder_ReturnsSuccess
- Заказ без товаров — ProcessOrderAsync_WithEmptyItems_ThrowsInvalidOrderException
- Ошибка оплаты — ProcessOrderAsync_WhenPaymentFails_ReturnsFailureResult
- Email отправляется корректно — ProcessOrderAsync_SendsEmailOnlyAfterSuccessfulPayment
- Email не отправляется при ошибке — ProcessOrderAsync_DoesNotSendEmail_WhenPaymentFails
- Корректный расчёт суммы — ProcessOrderAsync_CalculatesTotalCorrectly (Theory test)
Покрытие:
- Arrange-Act-Assert паттерн
- Изолированные моки для всех зависимостей
- Проверка вызова методов через Verify
- Theory tests для граничных случаев