Не удается разрешить службу для типа при использовании посредника в интеграционном тесте - PullRequest
0 голосов
/ 25 января 2020

Я использую посредник в своем проекте. Я хочу использовать интеграционный тест в своем проекте.

Я использую этот код для теста:

    [Fact]
    public async Task ListSubscribeAsync()
    {
        List<SubscribListDto> listModel = new List<SubscribListDto>();


        var add = await request.Get("/Subscribe/GetListSubscribe");
        await add.BodyAs<SubscribListDto>();
    }

, когда я запускаю тест, эта ошибка возникает:

---- System.InvalidOperationException: Не удалось разрешить службу для типа 'System.Collections.Generi c .IList 1[FluentValidation.IValidator 1 [Travel.Services.SubscribeServices.Query.SubscribeList.SubscribeListCommand]]' при попытке активировать 'Travel.Common.ValidateBehavior.Valhaate * ValidateCommandBommand0 * 1 [System.Collections.Generi c .IEnumerable`1 [Travel.ViewModel.SubscibeDto.SubscribListDto]]]. ---- System.NotImplementedException: метод или операция не реализованы.

это конфигурация проекта для использования интеграционного теста:

 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();
    }

DbContextFactory :

 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;
    }
}

и это тестовый класс:

 public class SubscribeTest : IClassFixture<TravelRequest<Startup>>, IClassFixture<DbContextFactory>, IDisposable
{
    private readonly TravelRequest<Startup> request;
    private readonly DbContextFactory contextFactory;
    public Mock<IMediator> Mock;
    public SubscribeController SubscribeController;

    public SubscribeTest(TravelRequest<Startup> request , DbContextFactory contextFactory)
    {
        Mock = new Mock<IMediator>(MockBehavior.Strict);
        SubscribeController = new SubscribeController(Mock.Object);
        this.request = request;
        this.contextFactory = contextFactory;
    }



    [Fact]
    public async Task ListSubscribeAsync()
    {
        List<SubscribListDto> listModel = new List<SubscribListDto>();


        var add = await request.Get("/Subscribe/GetListSubscribe");
        await add.BodyAs<SubscribListDto>();
    }

Теперь в чем проблема? Как я могу решить эту проблему ????

...