На каких фреймворках писал автотесты?

«На каких фреймворках писал автотесты?» — вопрос из категории Тестирование, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Работал с широким спектром фреймворков для разных уровней тестирования:

Модульное и интеграционное тестирование (Unit/Integration):

  • xUnit / NUnit / MSTest: Классические фреймворки для модульных тестов в .NET. Предпочитаю xUnit за чистоту API и отсутствие атрибутов [SetUp]/[TearDown].
    [Fact]
    public void Calculate_Sum_ReturnsCorrectResult()
    {
        // Arrange
        var calculator = new Calculator();
        // Act
        var result = calculator.Add(5, 3);
        // Assert
        Assert.Equal(8, result);
    }
  • Moq / NSubstitute: Библиотеки для изоляции зависимостей через мокирование (mocking).
    var mockService = new Mock<IDataService>();
    mockService.Setup(s => s.GetUserName(It.IsAny<int>())).Returns("TestUser");

Тестирование API (API Testing):

  • HttpClient (встроенный) + xUnit: Для прямых HTTP-запросов.
  • RestSharp: Удобная библиотека-обёртка для работы с REST API.
    var client = new RestClient("https://api.example.com");
    var request = new RestRequest("users/{id}", Method.Get);
    request.AddUrlSegment("id", 1);
    var response = await client.ExecuteAsync<User>(request);
    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

UI-тестирование веб-приложений (UI Testing):

  • Selenium WebDriver: Стандарт для автоматизации браузеров. Использовал с паттерном Page Object Model (POM).
    [Test]
    public void Login_WithValidCredentials_Success()
    {
        var driver = new ChromeDriver();
        var loginPage = new LoginPage(driver);
        loginPage.Navigate().Login("user", "pass");
        Assert.IsTrue(new HomePage(driver).IsUserLoggedIn());
    }
  • Playwright (более современная альтернатива): Предлагает лучшую производительность и встроенные ожидания (auto-wait).

BDD / Acceptance тестирование (BDD Testing):

  • SpecFlow: Позволяет писать тесты на языке Gherkin (Given-When-Then) и интегрировать их в .NET.
    Feature: Calculator
        Scenario: Add two numbers
            Given I have entered 50 into the calculator
            And I have entered 70 into the calculator
            When I press add
            Then the result should be 120

Другие инструменты:

  • FluentAssertions: Для более читаемых утверждений (assertions).
  • Bogus / AutoFixture: Для генерации тестовых данных.
  • WireMock.NET: Для мокирования внешних HTTP-сервисов в интеграционных тестах.