Reo.Core.Xunit.IntegrationTesting 6.0.31715

There is a newer version of this package available.
See the version list below for details.
dotnet add package Reo.Core.Xunit.IntegrationTesting --version 6.0.31715
NuGet\Install-Package Reo.Core.Xunit.IntegrationTesting -Version 6.0.31715
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Reo.Core.Xunit.IntegrationTesting" Version="6.0.31715" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Reo.Core.Xunit.IntegrationTesting --version 6.0.31715
#r "nuget: Reo.Core.Xunit.IntegrationTesting, 6.0.31715"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Reo.Core.Xunit.IntegrationTesting as a Cake Addin
#addin nuget:?package=Reo.Core.Xunit.IntegrationTesting&version=6.0.31715

// Install Reo.Core.Xunit.IntegrationTesting as a Cake Tool
#tool nuget:?package=Reo.Core.Xunit.IntegrationTesting&version=6.0.31715

Xunit.IntegrationTesting

Расширение фреймворка xUnit для выполнения интеграционного тестирования

Использование

Первоначальная настройка

В проекте с тестами необходимо определить файл со следующим содержимым:

using Reo.Core.IntegrationTesting.TestFramework.Mongo;
using Reo.Core.IntegrationTesting.TestFramework.Postgres;
using Reo.Core.Xunit.IntegrationTesting.Attributes;

[assembly:EnableIntegrationTestingFramework]
[assembly:RaiseContainer<PostgresTestContainer<TestingContext>>]
[assembly:RaiseContainer<MongoTestContainer>]

Атрибут EnableIntegrationTestingFramework должен быть указан в обязательном порядке. Он указывает xUnit, что необходимо использовать расширенный тестовый фреймворк вместо обычного.

Атрибут RaiseContainer нужен для того, чтобы при запуске тестов запустился контейнер указанного типа. В прошлом контейнеры запускались при старте каждого тестового класса, теперь запускается единственный контейнер для всех тестов примерно сразу после загрузки сборки.

На данный момент реализованы четыре контейнера (их можно найти в пакете Reo.Core.IntegrationTesting):

  • Postgres (PostgresTestContainer{TDbContext} и PostgresFixture{TDbContext})
  • Mongo (MongoTestContainer и MongoFixture)
  • Redis (RedisTestContainer и RedisFixture)
  • Elastic (ElasticTestContainer и ElasticFixture)
Написание тестов

В тестовом классе необходимо указать какую фикстуру вы хотите использовать.

CollectionFixture

Фикстура создается один раз на запускаемую пачку тестов

// CollectionDefinition.cs

[CollectionDefinition(nameof(PostgresDefinition))]
public sealed class PostgresDefinition : ICollectionFixture<PostgresFixture<TestingDbContext>>
{ }
// TestClass.cs

[Collection(nameof(PostgresDefinition))]
public sealed class TestClass
{
    private readonly PostgresFixture<TestingDbContext> _fixture;

    public TestClass(PostgresFixture<TestingDbContext> fixture)
    {
        _fixture = fixture;
    }

    [Fact]
    public void Verify()
    {
        // ...
    }
}

К сожалению, CollectionDefinition необходимо описывать в каждой сборке, иначе xUnit их не увидит (см. документацию xUnit)

ClassFixture

Фикстура создается один раз на запускаемый тестовый класс

public sealed class TestClass : IClassFixture<MongoFixture>
{
    private readonly MongoFixture _fixture;

    public TestClass(MongoFixture fixture)
    {
        _fixture = fixture;
    }

    [Fact]
    public void Verify()
    {
        // ...
    }
}

И то, и другое

xUnit не запрещает внедрять IClassFixture и ICollectionFixture одновременно:

[Collection(nameof(PostgresDefinition))]
public sealed class TestClass : IClassFixture<MongoFixture>
{
    // ...

    public TestClass(PostgresFixture<TestingDbContext> postgresFixture, MongoFixture mongoFixture)
    {
    	// ...
    }

    // ...
}

Сидирование данных

Чтобы проинициализировать справочники, вы должны реализовать абстрактный класс ContainerSeeder

public sealed class PostgresSeeder : ContainerSeeder<PostgresFixture<TestingContext>>
{
    /// <inheritdoc />
    public override async Task SeedAsync(PostgresFixture<TestingContext> fixture)
    {
        await using var databaseContext =
            await fixture.DatabaseContextFactory.CreateDbContextAsync();

        databaseContext.References.Add(new()
        {
            Id = Guid.NewGuid(),
            Name = "Profile test"
        });

        await databaseContext.SaveChangesAsync();
    }
}

Сид не должен содержать конструкторов, кроме стандартного. Количество сидов для одной фикстуры не ограничено.

Немного про очистку базы данных после исполнения конкретного теста

Если после каждого теста вы хотите откатывать ее в первоначальное состояние - используйте метод CleanupAsync, определенной у каждой фикстуры:

public sealed class Tests : IClassFixture<PostgresFixture<TestingContext>>, IAsyncLifetime
{
    private readonly PostgresFixture<TestingContext> _fixture;

    public ContainerSeederTests(PostgresFixture<TestingContext> fixture)
        => _fixture = fixture;

    public async Task InitializeAsync()
    {
        await using var databaseContext =
            await _fixture.DatabaseContextFactory.CreateDbContextAsync();

        databaseContext.Entities.Add(new()
        {
            Id = Guid.NewGuid()
        });

        await databaseContext.SaveChangesAsync();
    }

    [Theory]
    [InlineData(1)]
    [InlineData(2)]
    [InlineData(3)]
    public async Task Verify(int _)
    {
        // Благодаря _fixture.CleanupAsync() в базе всегда будет 1 запись, добавленная в InitializeAsync()
    }


    public Task DisposeAsync()
        => _fixture.CleanupAsync();
}

Метод CleanupAsync очищает базу данных и повторно выполняет сидирование справочников

Регистрация артефактов из фикстуры в AutoMocker

При внедрении фикстуры используйте готовые методы расширения:

public sealed class TestClass :
    IClassFixture<PostgresFixture<TestingDbContext>>,
    IClassFixture<MongoFixture>,
    IClassFixture<ElasticFixture>,
    IClassFixture<RedisFixture>
{
    private readonly AutoMocker _mocker = new();

    // ...

    public TestClass(
        PostgresFixture<TestingDbContext> postgresFixture,
        MongoFixture mongoFixture,
        ElasticFixture elasticFixture,
        RedisFixture redisFixture)
    {
    	// ...

        _mocker
            .SetupPostgres(postgresFixture)
            .SetupMongo(mongoFixture)
            .SetupElastic(elasticFixture)
            .SetupRedis(redisFixture);
    }

    // ...
}
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Reo.Core.Xunit.IntegrationTesting:

Package Downloads
Reo.Core.IntegrationTesting

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
6.0.31815 0 6/7/2024
6.0.31814 32 6/6/2024
6.0.31813 33 6/6/2024
6.0.31812 40 6/6/2024
6.0.31811 36 6/6/2024
6.0.31810 56 6/6/2024
6.0.31809 56 6/6/2024
6.0.31808 50 6/6/2024
6.0.31807 69 6/5/2024
6.0.31806 88 6/4/2024
6.0.31805 81 6/4/2024
6.0.31804 79 6/4/2024
6.0.31803 81 6/4/2024
6.0.31802 81 6/4/2024
6.0.31801 86 6/3/2024
6.0.31800 82 6/3/2024
6.0.31799 74 6/3/2024
6.0.31798 75 6/3/2024
6.0.31797 66 6/3/2024
6.0.31796 81 6/3/2024
6.0.31795 88 6/3/2024
6.0.31794 99 5/31/2024
6.0.31793 97 5/30/2024
6.0.31792 92 5/30/2024
6.0.31791 89 5/30/2024
6.0.31790 86 5/30/2024
6.0.31789 87 5/30/2024
6.0.31788 91 5/30/2024
6.0.31787 92 5/29/2024
6.0.31786 84 5/29/2024
6.0.31785 88 5/29/2024
6.0.31784 79 5/29/2024
6.0.31783 91 5/27/2024
6.0.31782 82 5/27/2024
6.0.31781 94 5/26/2024
6.0.31780 88 5/24/2024
6.0.31779 91 5/22/2024
6.0.31778 98 5/22/2024
6.0.31777 85 5/22/2024
6.0.31776 91 5/22/2024
6.0.31775 90 5/22/2024
6.0.31774 81 5/21/2024
6.0.31773 81 5/21/2024
6.0.31772 93 5/20/2024
6.0.31771 89 5/16/2024
6.0.31770 79 5/15/2024
6.0.31769 89 5/15/2024
6.0.31768 92 5/15/2024
6.0.31767 77 5/15/2024
6.0.31766 93 5/15/2024
6.0.31764 84 5/14/2024
6.0.31763 79 5/14/2024
6.0.31762 78 5/14/2024
6.0.31761 85 5/14/2024
6.0.31760 88 5/14/2024
6.0.31759 91 5/13/2024
6.0.31758 89 5/13/2024
6.0.31757 79 5/13/2024
6.0.31756 81 5/12/2024
6.0.31755 83 5/12/2024
6.0.31754 89 5/12/2024
6.0.31753 94 5/8/2024
6.0.31751 98 5/7/2024
6.0.31749 97 5/6/2024
6.0.31748 101 5/6/2024
6.0.31747 105 5/6/2024
6.0.31746 67 5/3/2024
6.0.31745 54 5/3/2024
6.0.31744 56 5/3/2024
6.0.31743 54 5/2/2024
6.0.31742 99 4/27/2024
6.0.31741 97 4/27/2024
6.0.31740 99 4/26/2024
6.0.31739 92 4/26/2024
6.0.31738 107 4/26/2024
6.0.31737 107 4/26/2024
6.0.31735 104 4/25/2024
6.0.31734 92 4/25/2024
6.0.31733 91 4/25/2024
6.0.31732 94 4/25/2024
6.0.31731 82 4/25/2024
6.0.31730 99 4/24/2024
6.0.31729 90 4/24/2024
6.0.31728 95 4/24/2024
6.0.31727 91 4/23/2024
6.0.31726 77 4/23/2024
6.0.31725 91 4/23/2024
6.0.31724 93 4/22/2024
6.0.31723 93 4/22/2024
6.0.31722 100 4/22/2024
6.0.31721 98 4/22/2024
6.0.31720 91 4/22/2024
6.0.31719 89 4/22/2024
6.0.31718 91 4/22/2024
6.0.31717 93 4/22/2024
6.0.31716 89 4/22/2024
6.0.31715 104 4/20/2024
6.0.31714 103 4/19/2024
6.0.31713 81 4/19/2024
6.0.31712 79 4/19/2024
6.0.31711 95 4/19/2024
6.0.31710 81 4/19/2024
6.0.31709 89 4/19/2024
6.0.31708 90 4/18/2024
6.0.31707 85 4/18/2024
6.0.31706 83 4/18/2024
6.0.31705 82 4/17/2024
6.0.31704 103 4/17/2024
6.0.31703 91 4/17/2024
6.0.31702 92 4/17/2024
6.0.31701 88 4/16/2024
6.0.31700 86 4/16/2024
6.0.31699 88 4/16/2024
6.0.31698 81 4/16/2024
6.0.31697 81 4/16/2024
6.0.31696 80 4/16/2024
6.0.31695 76 4/16/2024
6.0.31694 82 4/16/2024
6.0.31693 82 4/16/2024
6.0.31692 79 4/15/2024
6.0.31691 80 4/15/2024
6.0.31690 91 4/15/2024
6.0.31688 98 4/12/2024
6.0.31687 76 4/12/2024
6.0.31686 80 4/12/2024
6.0.31685 79 4/12/2024
6.0.31684 78 4/11/2024
6.0.31683 88 4/10/2024
6.0.31682 81 4/10/2024
6.0.31681 80 4/10/2024
6.0.31680 85 4/10/2024
6.0.31679 76 4/10/2024
6.0.31678 77 4/10/2024
6.0.31677 89 4/9/2024
6.0.31676 93 4/9/2024
6.0.31675 90 4/8/2024
6.0.31674 97 4/8/2024
6.0.31673 99 4/8/2024
6.0.31672 77 4/8/2024
6.0.31671 77 4/8/2024
6.0.31670 88 4/8/2024
6.0.31669 85 4/8/2024
6.0.31668 93 4/5/2024
6.0.31667 94 4/5/2024
6.0.31666 102 4/3/2024
6.0.31665 93 4/3/2024
6.0.31663 97 4/3/2024
6.0.31662 89 4/3/2024
6.0.31661 93 4/2/2024
6.0.31660 94 4/1/2024
6.0.31659 85 4/1/2024
6.0.31658 82 4/1/2024
6.0.31657 88 3/29/2024
6.0.31656 82 3/29/2024
6.0.31655 85 3/29/2024
6.0.31654 93 3/29/2024
6.0.31653 78 3/29/2024
6.0.31651 73 3/29/2024
6.0.31650 78 3/29/2024
6.0.31649 79 3/29/2024
6.0.31648 79 3/29/2024
6.0.31647 77 3/29/2024
6.0.31646 99 3/29/2024
6.0.31645 82 3/28/2024
6.0.31644 84 3/28/2024
6.0.31643 90 3/28/2024
6.0.31642 85 3/28/2024
6.0.31639 89 3/28/2024
6.0.31638 74 3/28/2024
6.0.31637 98 3/27/2024
6.0.31636 120 3/27/2024
6.0.31631 88 3/27/2024
6.0.31626 95 3/26/2024
6.0.31625 102 3/25/2024
6.0.31618 100 3/20/2024
6.0.31617 91 3/20/2024
6.0.31616 103 3/20/2024
6.0.31615 91 3/20/2024
6.0.31614 111 3/19/2024
6.0.31613 106 3/18/2024
6.0.31612 116 3/18/2024
6.0.31611 117 3/18/2024
6.0.31610 110 3/18/2024
6.0.31609 103 3/15/2024
6.0.31608 103 3/14/2024
6.0.31607 115 3/13/2024
6.0.31606 103 3/13/2024
6.0.31605 101 3/13/2024
6.0.31604 99 3/12/2024
6.0.31603 98 3/12/2024
6.0.31602 129 3/7/2024
6.0.31601 105 3/7/2024
6.0.31600 114 3/7/2024
6.0.31599 109 3/6/2024
6.0.31598 100 3/6/2024
6.0.31597 105 3/6/2024
6.0.31596 103 3/6/2024
6.0.31595 114 3/6/2024
6.0.31594 103 3/4/2024
6.0.31593 91 3/4/2024
6.0.31590 99 3/1/2024
6.0.31589 94 3/1/2024
6.0.31588 98 3/1/2024
6.0.31587 88 3/1/2024
6.0.31586 96 3/1/2024
6.0.31585 86 3/1/2024
6.0.31584 98 3/1/2024
6.0.31583 89 3/1/2024
6.0.31582 100 2/29/2024
6.0.31581 92 2/29/2024
6.0.31580 98 2/29/2024
6.0.31579 102 2/29/2024
6.0.31578 101 2/29/2024
6.0.31577 96 2/29/2024
6.0.31576 99 2/29/2024
6.0.31575 100 2/28/2024