Ответ
Работал с широким спектром фреймворков для разных уровней тестирования:
Модульное и интеграционное тестирование (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-сервисов в интеграционных тестах.