Я использую посредник в своем проекте. Я хочу использовать интеграционный тест в своем проекте.
Я использую этот код для теста:
[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>();
}
Теперь в чем проблема? Как я могу решить эту проблему ????