Sobes.tech
Назад к вопросам
Junior — Middle
62

Можешь перечислить популярные инструменты или фреймворки для проведения модульных тестов в своих проектах?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Для модульных тестов в C# чаще всего используют xUnit, NUnit и MSTest. Обычно также ожидают упоминание мок-фреймворков вроде Moq или NSubstitute для изоляции зависимостей. Важно показать, что выбор инструмента зависит от команды, инфраструктуры и личного опыта.

Определение:

Модульное тестирование — это проверка отдельной единицы кода, обычно метода или класса, в изоляции от внешних зависимостей. Для C# популярны тестовые фреймворки xUnit, NUnit и MSTest, а для подмены зависимостей — Moq, NSubstitute, FakeItEasy. Эти инструменты помогают писать автоматические тесты для бизнес-логики, сервисов и утилит.

Пример использования:

Например, в сервисе расчёта скидки можно проверить, что для VIP-клиента возвращается нужный процент, а вызовы к базе данных или HTTP-клиенту подменить моками.

using Moq;
using Xunit;

public class DiscountServiceTests
{
    [Fact]
    public void Calculate_ForVipCustomer_ReturnsExpectedDiscount()
    {
        var customerRepo = new Mock<ICustomerRepository>();
        customerRepo.Setup(r => r.IsVip(1)).Returns(true);

        var service = new DiscountService(customerRepo.Object);

        var discount = service.Calculate(1, 1000);

        Assert.Equal(100m, discount);
    }
}

public class DiscountService
{
    private readonly ICustomerRepository _customerRepository;

    public DiscountService(ICustomerRepository customerRepository)
    {
        _customerRepository = customerRepository;
    }

    public decimal Calculate(int customerId, decimal amount)
    {
        return _customerRepository.IsVip(customerId) ? amount * 0.1m : 0m;
    }
}

public interface ICustomerRepository
{
    bool IsVip(int customerId);
}

Пояснение кода:

  • Moq создаёт поддельную реализацию ICustomerRepository.
  • Setup(...).Returns(true) задаёт поведение мока: для клиента с id 1 он считается VIP.
  • DiscountService получает зависимость через конструктор, что делает код тестируемым.
  • Assert.Equal(100m, discount) проверяет ожидаемый результат: 10% от 1000.

Ключевые моменты:

  • xUnit, NUnit и MSTest — основные фреймворки для модульных тестов в C#.
  • Moq и NSubstitute часто используют для моков и изоляции зависимостей.
  • Хороший unit-тест проверяет одну небольшую часть логики и не зависит от БД, сети и файловой системы.
  • Выбор инструмента обычно определяется стандартом проекта и привычками команды.
  • Важно не только знать фреймворк, но и уметь строить тестируемую архитектуру через интерфейсы и DI.