/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Testing/test/AspNetTestAssemblyRunnerTest.cs
219 строк
7 KB
William Godbe
Rename Microsoft.Aspnetcore.Testing to Microsoft.AspNetCore.InternalTesting (#51713)
02 ноя 2023, 03:15
Не верифицирован
02 ноя 2023, 03:15
fc8deca
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Reflection; using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; namespace Microsoft.AspNetCore.InternalTesting; public class AspNetTestAssemblyRunnerTest { private const int NotCalled = -1; [Fact] public async Task ForAssemblyHasHigherPriorityThanConstructors() { var runner = TestableAspNetTestAssemblyRunner.Create(typeof(TestAssemblyFixtureWithAll)); await runner.AfterTestAssemblyStartingAsync_Public(); Assert.NotNull(runner.Fixtures); var fixtureObject = Assert.Single(runner.Fixtures); var fixture = Assert.IsType<TestAssemblyFixtureWithAll>(fixtureObject); Assert.False(fixture.ConstructorWithMessageSinkCalled); Assert.True(fixture.ForAssemblyCalled); Assert.False(fixture.ParameterlessConstructorCalled); } [Fact] public async Task ConstructorWithMessageSinkHasHigherPriorityThanParameterlessConstructor() { var runner = TestableAspNetTestAssemblyRunner.Create(typeof(TestAssemblyFixtureWithMessageSink)); await runner.AfterTestAssemblyStartingAsync_Public(); Assert.NotNull(runner.Fixtures); var fixtureObject = Assert.Single(runner.Fixtures); var fixture = Assert.IsType<TestAssemblyFixtureWithMessageSink>(fixtureObject); Assert.True(fixture.ConstructorWithMessageSinkCalled); Assert.False(fixture.ParameterlessConstructorCalled); } [Fact] public async Task CalledInExpectedOrder_SuccessWithDispose() { var runner = TestableAspNetTestAssemblyRunner.Create(typeof(TextAssemblyFixtureWithDispose)); var runSummary = await runner.RunAsync(); Assert.NotNull(runSummary); Assert.Equal(0, runSummary.Failed); Assert.Equal(0, runSummary.Skipped); Assert.Equal(1, runSummary.Total); Assert.NotNull(runner.Fixtures); var fixtureObject = Assert.Single(runner.Fixtures); var fixture = Assert.IsType<TextAssemblyFixtureWithDispose>(fixtureObject); Assert.Equal(NotCalled, fixture.ReportTestFailureCalledAt); Assert.Equal(0, fixture.DisposeCalledAt); } [Fact] public async Task CalledInExpectedOrder_FailedWithDispose() { var runner = TestableAspNetTestAssemblyRunner.Create( typeof(TextAssemblyFixtureWithDispose), failTestCase: true); var runSummary = await runner.RunAsync(); Assert.NotNull(runSummary); Assert.Equal(1, runSummary.Failed); Assert.Equal(0, runSummary.Skipped); Assert.Equal(1, runSummary.Total); Assert.NotNull(runner.Fixtures); var fixtureObject = Assert.Single(runner.Fixtures); var fixture = Assert.IsType<TextAssemblyFixtureWithDispose>(fixtureObject); Assert.Equal(0, fixture.ReportTestFailureCalledAt); Assert.Equal(1, fixture.DisposeCalledAt); } [Fact] public async Task CalledInExpectedOrder_SuccessWithAsyncDispose() { var runner = TestableAspNetTestAssemblyRunner.Create(typeof(TestAssemblyFixtureWithAsyncDispose)); var runSummary = await runner.RunAsync(); Assert.NotNull(runSummary); Assert.Equal(0, runSummary.Failed); Assert.Equal(0, runSummary.Skipped); Assert.Equal(1, runSummary.Total); Assert.NotNull(runner.Fixtures); var fixtureObject = Assert.Single(runner.Fixtures); var fixture = Assert.IsType<TestAssemblyFixtureWithAsyncDispose>(fixtureObject); Assert.Equal(0, fixture.InitializeAsyncCalledAt); Assert.Equal(NotCalled, fixture.ReportTestFailureCalledAt); Assert.Equal(1, fixture.AsyncDisposeCalledAt); } [Fact] public async Task CalledInExpectedOrder_FailedWithAsyncDispose() { var runner = TestableAspNetTestAssemblyRunner.Create( typeof(TestAssemblyFixtureWithAsyncDispose), failTestCase: true); var runSummary = await runner.RunAsync(); Assert.NotNull(runSummary); Assert.Equal(1, runSummary.Failed); Assert.Equal(0, runSummary.Skipped); Assert.Equal(1, runSummary.Total); Assert.NotNull(runner.Fixtures); var fixtureObject = Assert.Single(runner.Fixtures); var fixture = Assert.IsType<TestAssemblyFixtureWithAsyncDispose>(fixtureObject); Assert.Equal(0, fixture.InitializeAsyncCalledAt); Assert.Equal(1, fixture.ReportTestFailureCalledAt); Assert.Equal(2, fixture.AsyncDisposeCalledAt); } private class TestAssemblyFixtureWithAll { private TestAssemblyFixtureWithAll(bool forAssemblyCalled) { ForAssemblyCalled = forAssemblyCalled; } public TestAssemblyFixtureWithAll() { ParameterlessConstructorCalled = true; } public TestAssemblyFixtureWithAll(IMessageSink messageSink) { ConstructorWithMessageSinkCalled = true; } public static TestAssemblyFixtureWithAll ForAssembly(Assembly assembly) { return new TestAssemblyFixtureWithAll(forAssemblyCalled: true); } public bool ParameterlessConstructorCalled { get; } public bool ConstructorWithMessageSinkCalled { get; } public bool ForAssemblyCalled { get; } } private class TestAssemblyFixtureWithMessageSink { public TestAssemblyFixtureWithMessageSink() { ParameterlessConstructorCalled = true; } public TestAssemblyFixtureWithMessageSink(IMessageSink messageSink) { ConstructorWithMessageSinkCalled = true; } public bool ParameterlessConstructorCalled { get; } public bool ConstructorWithMessageSinkCalled { get; } } private class TextAssemblyFixtureWithDispose : IAcceptFailureReports, IDisposable { private int _position; public int ReportTestFailureCalledAt { get; private set; } = NotCalled; public int DisposeCalledAt { get; private set; } = NotCalled; void IAcceptFailureReports.ReportTestFailure() { ReportTestFailureCalledAt = _position++; } void IDisposable.Dispose() { DisposeCalledAt = _position++; } } private class TestAssemblyFixtureWithAsyncDispose : IAcceptFailureReports, IAsyncLifetime { private int _position; public int InitializeAsyncCalledAt { get; private set; } = NotCalled; public int ReportTestFailureCalledAt { get; private set; } = NotCalled; public int AsyncDisposeCalledAt { get; private set; } = NotCalled; Task IAsyncLifetime.InitializeAsync() { InitializeAsyncCalledAt = _position++; return Task.CompletedTask; } void IAcceptFailureReports.ReportTestFailure() { ReportTestFailureCalledAt = _position++; } Task IAsyncLifetime.DisposeAsync() { AsyncDisposeCalledAt = _position++; return Task.CompletedTask; } } }