Reo.Core.Xunit.IntegrationTesting 6.0.31706

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.31706
NuGet\Install-Package Reo.Core.Xunit.IntegrationTesting -Version 6.0.31706
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.31706" />
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.31706
#r "nuget: Reo.Core.Xunit.IntegrationTesting, 6.0.31706"
#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.31706

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

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.31879 0 6/20/2024
6.0.31878 64 6/19/2024
6.0.31877 61 6/19/2024
6.0.31876 62 6/19/2024
6.0.31875 67 6/19/2024
6.0.31874 63 6/19/2024
6.0.31873 64 6/19/2024
6.0.31872 75 6/19/2024
6.0.31871 66 6/19/2024
6.0.31870 69 6/19/2024
6.0.31869 68 6/19/2024
6.0.31868 83 6/18/2024
6.0.31867 69 6/18/2024
6.0.31866 78 6/18/2024
6.0.31865 78 6/18/2024
6.0.31864 76 6/18/2024
6.0.31863 70 6/18/2024
6.0.31862 79 6/18/2024
6.0.31861 71 6/18/2024
6.0.31860 76 6/17/2024
6.0.31859 76 6/17/2024
6.0.31858 74 6/17/2024
6.0.31857 77 6/17/2024
6.0.31856 82 6/17/2024
6.0.31855 73 6/17/2024
6.0.31854 74 6/17/2024
6.0.31853 79 6/17/2024
6.0.31852 77 6/17/2024
6.0.31851 79 6/17/2024
6.0.31850 79 6/17/2024
6.0.31849 73 6/17/2024
6.0.31848 82 6/15/2024
6.0.31847 79 6/15/2024
6.0.31846 69 6/14/2024
6.0.31845 80 6/14/2024
6.0.31844 83 6/14/2024
6.0.31843 74 6/14/2024
6.0.31842 80 6/14/2024
6.0.31841 77 6/13/2024
6.0.31840 82 6/13/2024
6.0.31839 79 6/13/2024
6.0.31838 74 6/13/2024
6.0.31837 78 6/13/2024
6.0.31836 78 6/13/2024
6.0.31835 78 6/13/2024
6.0.31834 80 6/13/2024
6.0.31833 71 6/12/2024
6.0.31832 68 6/12/2024
6.0.31831 68 6/11/2024
6.0.31830 66 6/11/2024
6.0.31829 65 6/11/2024
6.0.31828 67 6/11/2024
6.0.31827 70 6/11/2024
6.0.31826 65 6/11/2024
6.0.31825 74 6/10/2024
6.0.31824 67 6/10/2024
6.0.31823 68 6/10/2024
6.0.31822 69 6/10/2024
6.0.31821 68 6/10/2024
6.0.31820 69 6/10/2024
6.0.31819 70 6/10/2024
6.0.31818 65 6/10/2024
6.0.31817 70 6/7/2024
6.0.31816 71 6/7/2024
6.0.31815 75 6/7/2024
6.0.31814 81 6/6/2024
6.0.31813 79 6/6/2024
6.0.31812 84 6/6/2024
6.0.31811 78 6/6/2024
6.0.31810 83 6/6/2024
6.0.31809 82 6/6/2024
6.0.31808 78 6/6/2024
6.0.31807 80 6/5/2024
6.0.31806 89 6/4/2024
6.0.31805 82 6/4/2024
6.0.31804 80 6/4/2024
6.0.31803 82 6/4/2024
6.0.31802 82 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 99 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 94 5/27/2024
6.0.31782 83 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 106 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 82 4/16/2024
6.0.31697 83 4/16/2024
6.0.31696 81 4/16/2024
6.0.31695 78 4/16/2024
6.0.31694 84 4/16/2024
6.0.31693 84 4/16/2024
6.0.31692 81 4/15/2024
6.0.31691 82 4/15/2024
6.0.31690 93 4/15/2024
6.0.31688 99 4/12/2024
6.0.31687 78 4/12/2024
6.0.31686 82 4/12/2024
6.0.31685 80 4/12/2024
6.0.31684 80 4/11/2024
6.0.31683 90 4/10/2024
6.0.31682 82 4/10/2024
6.0.31681 81 4/10/2024
6.0.31680 87 4/10/2024
6.0.31679 77 4/10/2024
6.0.31678 78 4/10/2024
6.0.31677 90 4/9/2024
6.0.31676 95 4/9/2024
6.0.31675 91 4/8/2024
6.0.31674 98 4/8/2024
6.0.31673 100 4/8/2024
6.0.31672 78 4/8/2024
6.0.31671 78 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 89 3/27/2024
6.0.31626 96 3/26/2024
6.0.31625 103 3/25/2024
6.0.31618 101 3/20/2024
6.0.31617 92 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 97 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 103 2/29/2024
6.0.31578 101 2/29/2024
6.0.31577 96 2/29/2024
6.0.31576 101 2/29/2024
6.0.31575 100 2/28/2024