C# C#  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Тестирование с xUnit и подменами

Проверяет тесты xUnit, параметризацию, подмены и интеграционные границы. Сценарии отличают полезную проверку поведения от хрупкой проверки реализации, разбирают общее состояние, нестабильные тесты, контрактные наборы и стоимость чрезмерных mock-объектов.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 30
Что относится к Act?
C#
var calculator = new Calculator();      // Arrange
var result = calculator.Add(2, 3);     // Act
Assert.Equal(5, result);               // Assert
Вопрос 2 из 30
Почему expected не стоит вычислять тем же алгоритмом, что production?
Вопрос 3 из 30
Что не так с тестом без явного Assert?
C#
[Fact]
public void Valid_document_can_be_parsed()
{
    var document = Parse(validJson);
}
Вопрос 4 из 30
Какое имя лучше?
Вопрос 5 из 30
Почему shared mutable fixture может сделать тесты нестабильными?
C#
public class Tests
{
    private static readonly List<int> Shared = new();
}
Вопрос 6 из 30
Когда Theory лучше нескольких Fact?
C#
[Theory]
[InlineData(1, 1)]
[InlineData(2, 4)]
public void Square_matches_table(int value, int expected) =>
    Assert.Equal(expected, value * value);
Вопрос 7 из 30
Сколько отдельных тестовых случаев создаст xUnit?
C#
[Theory]
[InlineData(0)]
[InlineData(1)]
[InlineData(-1)]
public void Square_is_non_negative(int value) =>
    Assert.True(value * value >= 0);
Вопрос 8 из 30
Когда MemberData предпочтительнее InlineData?
Вопрос 9 из 30
Как сохранить читаемость большого набора?
C#
public static TheoryData<TaxCase> Cases => new()
{
    new("threshold-minus-one", 999m, 0m),
    new("at-threshold", 1000m, 100m)
};
Вопрос 10 из 30
Когда параметризация вредит?
Вопрос 11 из 30
Когда verify вызова важнее проверки состояния?
C#
await service.PayAsync(orderId, token);
paymentGateway.Verify(
    x => x.ChargeAsync(orderId, token),
    Times.Once);
Вопрос 12 из 30
Что проверить у SendAsync?
C#
sender.Verify(x => x.SendAsync(
    It.Is<Message>(m => m.OrderId == orderId && m.Kind == "paid"),
    token), Times.Once);
Вопрос 13 из 30
Почему strict mock может быть хрупким?
Вопрос 14 из 30
Чем подменить DateTime.UtcNow?
C#
var time = new FakeTimeProvider(new DateTimeOffset(2026, 1, 1, 0, 0, 0, TimeSpan.Zero));
var sut = new TokenService(time);
Вопрос 15 из 30
Что такое over-mocking?
Вопрос 16 из 30
Что делает тест интеграционным?
C#
await using var database = await PostgreSqlTestContainer.StartAsync();
await using var app = CreateApplication(database.ConnectionString);
var response = await app.Client.PostAsJsonAsync("/orders", command);
Вопрос 17 из 30
Почему контейнер целевой СУБД полезнее mock repository для SQL?
Вопрос 18 из 30
Как изолировать данные параллельных тестов?
C#
var testId = Guid.NewGuid();
await api.PostAsJsonAsync("/orders", new CreateOrder(testId), token);
var order = await api.GetFromJsonAsync<OrderDto>($"/orders/{testId}", token);
Вопрос 19 из 30
Что проверяет WebApplicationFactory в ASP.NET Core?
Вопрос 20 из 30
Почему интеграционные тесты всё равно не заменяют unit-тесты?
C#
// Unit: десятки границ расчёта скидки.
// Integration: один-два сценария, что HTTP -> DI -> DB сохраняет рассчитанную скидку.
Вопрос 21 из 30
Как поступить с flaky-тестом?
C#
[Fact]
public async Task Eventually_completes()
{
    await sut.RunAsync();
}
Вопрос 22 из 30
Как добавить полезный контекст к Theory?
C#
output.WriteLine("case={Case}; seed={Seed}; inputCount={Count}",
    testCase.Name, seed, input.Count);
Вопрос 23 из 30
Что показывает coverage?
Вопрос 24 из 30
Как найти медленные тесты?
Вопрос 25 из 30
Почему тестовый лог должен иметь redaction?
C#
output.WriteLine("requestId={0}; auth={1}", requestId, "<redacted>");
Вопрос 26 из 30
Что означает hermetic test?
C#
var clock = new FakeTimeProvider(fixedNow);
var store = new InMemoryOrderStore();
var sut = new OrderService(store, clock);
Вопрос 27 из 30
Когда contract test особенно полезен?
Вопрос 28 из 30
Что проверяет архитектурный тест?
C#
var result = Types.InAssembly(domainAssembly)
    .ShouldNot().HaveDependencyOn("MyApp.Infrastructure")
    .GetResult();
Assert.True(result.IsSuccessful);
Вопрос 29 из 30
Почему fake иногда лучше mock?
Вопрос 30 из 30
Как оценить ценность теста?
C#
// Предпочтительнее:
Assert.Equal(expectedBalance, result.Balance);
// Чем десять Verify внутренних вызовов, не являющихся контрактом.

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу