используйте медиатор cqrs в TDD для тестирования интеграции. net core 3 - PullRequest
1 голос
/ 26 января 2020

Я использую Mediator в своем проекте.

Демонстрационный проект на Github

Я хочу использовать TDD в своем проекте и интеграции тест с. Net core 3.0

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

public class SubscribeTest : IClassFixture<TravelRequest<Startup>>, IClassFixture<DbContextFactory>, IDisposable
{
    private readonly TravelRequest<Startup> request;
    private readonly DbContextFactory contextFactory;
    public SubscribeTest(TravelRequest<Startup> request , DbContextFactory contextFactory)
    {
        this.request = request;
        this.contextFactory = contextFactory;
    }


    public void Dispose()
    {
        request.Dispose();
    }

    [Fact]
    public async Task ListSubscribeAsync()
    {
        var add = await request.Get("/Subscribe/GetListSubscribe");
        await add.BodyAs<SubscribListDto>();
    }
}

и это TravelRequest:

    public class TravelRequest<TStartup> : IDisposable where TStartup : class
    {
        private readonly HttpClient client;
        private readonly TestServer server;

        public TravelRequest()
        {
            var webHostBuilder = new WebHostBuilder().UseStartup<TStartup>().UseConfiguration(ConfigorationSingltonConfigoration.GetConfiguration());
            this.server = new TestServer(webHostBuilder);
            this.client = server.CreateClient();
        }
    }

и это ConfigorationSingltonConfigoration для использования appSetting-test.json:

public class ConfigorationSingltonConfigoration
{
    private static IConfigurationRoot configuration;
    private ConfigorationSingltonConfigoration() { }
    public static IConfigurationRoot GetConfiguration()
    {
        if (configuration is null)
            configuration = new ConfigurationBuilder()
             .SetBasePath(Path.Combine(Path.GetFullPath("../../../")))
            .AddJsonFile("appsettings-test.json")
            .AddEnvironmentVariables()
            .Build();
        return configuration;
    }
}

и, наконец, это для набора DbContext:

 public class DbContextFactory : IDisposable
{
    public TravelContext Context { get; private set; }
    public DbContextFactory()
    {
        var dbBuilder = GetContextBuilderOptions<TravelContext>("SqlServer");

        Context = new TravelContext(dbBuilder.Options);
        Context.Database.Migrate();
    }

    public void Dispose()
    {
        Context.Dispose();
    }

    public TravelContext GetRefreshContext()
    {
        var dbBuilder = GetContextBuilderOptions<TravelContext>("SqlServer");
        Context = new TravelContext(dbBuilder.Options);

        return Context;
    }

    private DbContextOptionsBuilder<TravelContext> GetContextBuilderOptions<T>(string connectionStringName)
    {
        var connectionString = ConfigorationSingltonConfigoration.GetConfiguration().GetConnectionString(connectionStringName);
        var contextBuilder = new DbContextOptionsBuilder<TravelContext>();
        var servicesCollection = new ServiceCollection().AddEntityFrameworkSqlServer().BuildServiceProvider();

        contextBuilder.UseSqlServer(connectionString).UseInternalServiceProvider(servicesCollection);

        return contextBuilder;
    }
}

Сейчас Моя проблема здесь, когда я RunTest в результате он показывает мне эту ошибку:

---- System.InvalidOperationException: Невозможно разрешить службу для типа 'System.Collections.Generi c .IList1 [FluentValidation.IValidator1 [Travel.Services.SubscribeServices.Query. .Operation.OperationResult1 [System.Collections.Generi c .IEnumerable`1 [Travel.ViewModel.SubscibeDto.SubscribListDto]]]. ---- System.NotImplementedException: метод или операция не реализованы.

В чем проблема? как я могу решить эту проблему ??? я поставил исходный код проекта в верхней части вопроса

1 Ответ

0 голосов
/ 21 марта 2020

Я подозреваю, что валидаторы не зарегистрированы в контейнере.

Вы можете использовать FluentValidation в. NET Core с Dependency Injection, установив nuget и пропустив сборку.

Больше ссылок на Использование FluentValidation в. NET Ядро с инжекцией зависимостей .

Дополнительные справки о том, как это можно сделать, на Проверка текучести включена. NET Core 2.0 не регистрируется .

...