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

Ответ

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

Модульное и интеграционное тестирование (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-сервисов в интеграционных тестах.

Ответ 18+ 🔞

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

Модульники да интеграционы (Unit/Integration): Тут, понятное дело, классика жанра. xUnit / NUnit / MSTest – это как три пидораса, из которых один всегда норм. Я за 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. Подменяешь сервис на заглушку, и он тебе возвращает что скажешь, как послушная сука.

var mockService = new Mock<IDataService>();
mockService.Setup(s => s.GetUserName(It.IsAny<int>())).Returns("TestUser");

Тестирование API: Тут два пути: либо на чистом HttpClient с родным xUnit, либо обёрточка RestSharp, чтобы меньше писанины было. Второй, конечно, удобнее, не надо каждый раз велосипед из костылей собирать.

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-тесты для веба: О, это отдельная песня, блядь. 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 – вот это уже машина, блядь. Быстрее, умнее, с автоожиданиями, не надо вручную Thread.Sleep впихивать, как идиоту.

BDD / Acceptance тесты: Когда нужно, чтобы даже менеджер-олень что-то понял. SpecFlow – пишешь сценарии на этом ихнем Gherkin (Given-When-Then), а потом бэкенд на C# прикручиваешь. Выглядит как сказка для бизнеса.

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: Чтобы ассерты читались как предложения, а не как шифровка из психушек. result.Should().Be(8); – красота.
  • Bogus / AutoFixture: Генераторы тестовых данных. Чтобы не придумывать сто раз "Вася Пупкин", а он сам сгенерил тебе и имя, и почту, и хуй знает что ещё.
  • WireMock.NET: Для мокирования внешних сервисов в интеграционных тестах. Поднимаешь себе локально заглушку HTTP-сервиса и говоришь ей, что и как отвечать. Удобно, когда реальный сервис лежит или с ним просто не хочется связываться.

Вот такой вот зоопарк, блядь. Каждый инструмент для своего дела, но если брать не туда – сам себе злобный Буратино.