Я создаю интеграционные тесты для ASP.NET Core WebAPI. Я пытаюсь заставить TestServer использовать реальную, НЕ в памяти, базу данных sql-сервера.
Первая проблема заключалась в том, что WebHostBuilder не видел строку подключения в «connectionstring.json», поэтому я переместил строку подключения cofnig в «appsettings.json». Теперь WebHostBuilder загружает строку подключения из файла appsettings.json, но не выполняет загрузку данных из базы данных sql-сервера при выполнении запроса (возвращает пустую коллекцию). Это происходит, когда я запускаю его нормально (не как тестовый сервер) и выполняю GET через Postman.
У меня такой вопрос: "Можно ли заставить TestServer использовать базу данных sql-сервера и как это сделать?"
Я нашел похожий вопрос здесь call api Test server: интеграционные тесты API ядра .net , но нет ответа, как заставить TestSever работать с базой данных sql-server.
TestServer:
_server = new TestServer(WebHost.CreateDefaultBuilder()
.UseEnvironment("Development")
.ConfigureAppConfiguration(AddConfigFiles)
.UseStartup<Startup>()
);
AddConfigFiles метод:
public static void AddConfigFiles(WebHostBuilderContext hostingContext, IConfigurationBuilder config)
{
var env = hostingContext.HostingEnvironment;
config
.AddJsonFile("connectionstrings.json", optional: true)
.AddJsonFile($"connectionstrings.{env.EnvironmentName}.json", optional: true)
.AddJsonFile("appsettings.json", optional: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
config.AddEnvironmentVariables();
}
Строка подключения
"Data Source={MyServerName};Initial Catalog={MyDatabaseName};Integrated Security=True;"