Тест интеграции с тестовым сервером всегда возвращает 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 , так что это значения клиента:

0 ответов

Другие вопросы по тегам