.NET — интеграционное тестирование с промежуточным программным обеспечением (PACT)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 .NET — интеграционное тестирование с промежуточным программным обеспечением (PACT)

Сообщение Anonymous »

Привет!
Я пишу потребительские тесты, используя структуру PACT. И я пытаюсь запустить фабрику WebApplication. У меня есть следующие настройки. А в случае, когда я использую промежуточное ПО, все конечные точки возвращают 404. Знаете почему? Я регистрирую неправильное промежуточное программное обеспечение? Большое спасибо
Это действительно то, как я это называю. Конечная точка — это дамп, она просто возвращает данные. Это работает без добавления промежуточного программного обеспечения. Но верно и то, что я не могу настраивать службы. Мне приходится запускать фабрику таким образом из-за PACT, которому необходимо, чтобы приложение работало по TCP.
Factory
public class CustomWebApplicationFactory : WebApplicationFactory
{
private IHost? _host;

public string ServerAddress
{
get
{
EnsureServer();
return ClientOptions.BaseAddress.ToString();
}
}

protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.Configure(app =>
{
app.Use(async (context, next) =>
{
Console.WriteLine("Custom middleware executed before next middleware.");

await next.Invoke();

Console.WriteLine("Custom middleware executed after next middleware.");
});
});
}

protected override IHost CreateHost(IHostBuilder builder)
{
var testHost = builder.Build();

builder.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder.UseKestrel();
});

_host = builder.Build();
_host.Start();

var server = _host.Services.GetRequiredService();
var addresses = server.Features.Get();

ClientOptions.BaseAddress = addresses!.Addresses
.Select(x => new Uri(x))
.Last();

testHost.Start();
return testHost;
}

protected override void Dispose(bool disposing)
{
_host?.Dispose();
}

private void EnsureServer()
{
if (_host is null)
{
using var _ = CreateDefaultClient();
}
}
}

Тест:
public class ProductTest : IClassFixture
{
private readonly ITestOutputHelper _output;
private readonly string _serverAddress;
private readonly HttpClient? _trop;
private readonly ITestService _testService;

public ProductTest(ITestOutputHelper output, CustomWebApplicationFactory fixture)
{
_output = output;
_serverAddress = fixture.ServerAddress;
_trop = fixture.CreateClient();
}

[Fact]
public async Task EnsureProviderApiHonoursPactWithConsumer()
{
var lorto = await _trop.GetAsync($"/api/products");
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... eware-pact
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»