Как протестировать компонент веб-APIC#

Место общения программистов C#
Ответить
Anonymous
 Как протестировать компонент веб-API

Сообщение Anonymous »

Я бился головой о стену, пытаясь понять, как протестировать компонент моего веб-API. Когда-то это был довольно простой процесс с использованием TestServer и тестируемого класса Startup, но, похоже, ситуация изменилась.
Я пробовал использовать:

Код: Выделить всё

        var foo = new WebApplicationFactory();
var bar = foo.CreateClient();
var client = await bar.GetAsync($"/price/ada/adad/asas/v1/prices?itemNumber=123");

Проблема, с которой я столкнулся, заключается в том, что он просто зависает при создании клиента без обратной связи о том, что на самом деле происходит.
Поэтому я пошел по пути используя TestServer, где он кажется намного лучше, однако, похоже, чтобы он работал, мне нужно поместить мой класс TestStartup в ту же сборку, что и Startup? Я не помню, чтобы мне приходилось это делать, возможно ли, чтобы класс TestStartup находился в моей тестовой библиотеке и действовал таким же образом?
Например, это мой настройка

Код: Выделить всё

public class Startup
{
private readonly IConfiguration _configuration;

public Startup(IConfiguration configuration)
{
_configuration = configuration;
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger logger)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

public void ConfigureServices(IServiceCollection services)
{
ConfigureExternalDependencies(services);

services.AddControllers();
services.AddRouting();
}

protected virtual void ConfigureExternalDependencies(IServiceCollection services)
{
// .. override external I/O stuff
}
}

TestStartup выглядит так:

Код: Выделить всё

public class TestStartup : Startup
{
public TestStartup() : base(BuildConfiguration())
{
}

protected override void ConfigureExternalDependencies(IServiceCollection services)
{
services.AddTransient(_ => Substitute.For());
}

private static IConfiguration BuildConfiguration()
{
return new ConfigurationBuilder()
.AddInMemoryCollection()
.Build();
}
}
Когда я использую TestServer, использование происходит следующим образом:

Код: Выделить всё

        var webHostBuilder = new WebHostBuilder().UseStartup();
_server = new TestServer(webHostBuilder);
var client = _server.CreateClient();
_httpResponse = await client.GetAsync($"/price/ada/adad/asas/v1/prices?itemNumber=123");
Это работает, но мне бы хотелось, чтобы мой TestStartup не находился в пространстве производственного кода. Я что-то упустил?

Подробнее здесь: https://stackoverflow.com/questions/784 ... st-web-api
Ответить

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

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

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

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

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