Я пробовал использовать:
Код: Выделить всё
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
}
}
Код: Выделить всё
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();
}
}
Код: Выделить всё
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");
Подробнее здесь: https://stackoverflow.com/questions/784 ... st-web-api
Мобильная версия