我有一个.NET 8最小API设置:
var builder = WebApplication.CreateBuilder(args);
var app = builder.ConfigureApp();
app.Run();
// Reference for Testing Purposes of FastEndpoints
namespace BeeHive.Api
{
public abstract class Program;
}
public static WebApplication ConfigureApp(this WebApplicationBuilder builder)
{
builder = builder
.ConfigureConfiguration()
.ConfigureLogging()
.ConfigureSwagger()
.ConfigureDatabase()
.ConfigureApi();
var app = builder.Build();
app.UseSwaggerConfig()
.UseApi()
.UseDatabase();
return app;
}
现在我使用FastEnpoints:
https://fast-endpoints.com/docs/integration-unit-testing#service-registration
这样,我就有了集成测试的简单设置:
public class PingPongEndpointTest(BeeHiveApiFixture app) : TestBase<BeeHiveApiFixture>
{
[Fact]
public async Task PingPongEndpoint_ExpectedBehaviour()
{
var (httpResponse, dataResponse) = await app.Client.POSTAsync<PingPongEndpoint, PingPongEndpointRequest, PingPongEndpointResponse>(
new()
{
Text = "Test"
});
httpResponse.StatusCode.Should().Be(HttpStatusCode.OK);
dataResponse.ReversedText.Should().Be("tseT");
}
}
public class BeeHiveApiFixture : AppFixture<Program>
{
protected override void ConfigureApp(IWebHostBuilder a)
{
// Doesnt overwrite the WebApplicationBuilder
}
}
现在我的目标是现在使用我的配置数据库中的AddGbContent,因为这向真实的数据库显示,而我想用InMemory数据库覆盖它.
AppFixture中的正常情况我想覆盖此附件.但由于FastEndpoints和我的设置中的WebAppliationBuilder覆盖了IWebHostBuilder,因此这是不可覆盖的(这两个get都被调用了).
如何做到这一点?