Тест интеграции с тестовым сервером всегда возвращает 404
Я пытаюсь создать интеграционный тест с помощью Test Serer. Но я не знаю почему, я всегда получаю сообщение об ошибке [404 not found]. Я пробую самый простой маршрут "/".
Если у кого-то есть идеи, как это исправить, я был бы очень признателен.
Вот код, который я использую на своем тестовом сервере. Это мой базовый класс:
namespace NSG.Integration.Helpers
{
public class UnitTestFixture
{
//
public SqliteConnection sqliteConnection;
public ApplicationDbContext db_context;
public UserManager<ApplicationUser> userManager;
public RoleManager<ApplicationRole> roleManager;
public IConfiguration configuration = null;
private IWebHostBuilder _builder;
private TestServer _server;
private HttpClient _client;
//
public TestServer server { get { return _server; } }
public HttpClient client { get { return _client; } }
//
public void Fixture_ControllerTestSetup()
{
string projectPath = @"C:\Dat\Nsg\L\Web\22\Net.Incident4\NSG.NetIncident4.Core";
IWebHostBuilder _builder = null;
_server = null;
_client = null;
_builder = new WebHostBuilder()
.UseContentRoot(projectPath)
.UseEnvironment("Development")
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(projectPath);
config.AddJsonFile("appsettings.json");
}).UseStartup<TestStartup>();
_server = new TestServer(_builder);
_client = _server.CreateClient();
userManager = _server.Services.GetService<UserManager<ApplicationUser>>();
roleManager = _server.Services.GetService<RoleManager<ApplicationRole>>();
db_context = _server.Services.GetService<ApplicationDbContext>();
}
[TearDown]
public void Fixture_TearDown()
{
Console.WriteLine("Fixture_UnitTestSetup: Dispose ...");
if ( sqliteConnection != null )
{
sqliteConnection.Close();
sqliteConnection.Dispose();
sqliteConnection = null;
}
if (db_context != null)
{
db_context.Database.EnsureDeleted();
db_context.Dispose();
db_context = null;
}
if (userManager != null)
{
userManager.Dispose();
userManager = null;
}
if (roleManager != null)
{
roleManager.Dispose();
roleManager = null;
}
if (_client != null)
{
_client.Dispose();
_client = null;
}
if (_server != null)
{
_server.Dispose();
_server = null;
}
}
}
}
Это тестовый стартовый класс. Я использую SQLite в памяти в качестве моей БД:
namespace NSG.Integration.Helpers
{
public class TestStartup : NSG.NetIncident4.Core.Startup
{
//
public TestStartup(IConfiguration configuration) : base(configuration)
{
}
//
public override void ConfigureServices(IServiceCollection services)
{
base.ConfigureServices(services);
//
ApplicationDbContext db_context =
NSG_Helpers.GetSqliteMemoryDbContext(NSG_Helpers.GetSqliteMemoryConnection(), services);
UserManager<ApplicationUser> userManager =
services.BuildServiceProvider().GetService<UserManager<ApplicationUser>>();
RoleManager<ApplicationRole> roleManager =
services.BuildServiceProvider().GetService<RoleManager<ApplicationRole>>();
DatabaseSeeder _seeder =
new DatabaseSeeder(db_context, userManager, roleManager);
_seeder.Seed().Wait();
}
//
}
}
Это проверка концепции доступа к домашней странице:
namespace NSG.NetIncident4.Core_Tests.Infrastructure
{
[TestFixture]
public class EmailConfirmation_UnitTests : UnitTestFixture
{
//
public IConfiguration Configuration { get; set; }
Mock<IEmailSender> _emailSender = null;
[SetUp]
public void MySetup()
{
Fixture_ControllerTestSetup();
_emailSender = new Mock<IEmailSender>();
}
[Test()]
public async Task Home_Page_Test()
{
var response = await client.GetAsync("/");
response.EnsureSuccessStatusCode();
var responseString = await response.Content.ReadAsStringAsync();
Assert.AreEqual("Net-Incident Web API Services", responseString);
}
//
}
}
Я не знаю, правильно ли настроен HttpClient , так что это значения клиента: