Я создаю интеграционные тесты для ASP.NET Core WebAPI. Я пытаюсь заставить TestServer использовать настоящую, а НЕ в памяти базу данных sql-server.
Первая проблема заключалась в том, что WebHostBuilder не видел строку подключения в «connectionstring.json», поэтому я переместил cofnig строки подключения в «appsettings.json». Теперь WebHostBuilder загружает строку подключения из файла appsettings.json, но не загружает никаких данных из базы данных sql-server при выполнении запроса (возвращает пустую коллекцию). Это происходит, когда я запускаю его в обычном режиме (не как тестовый сервер) и выполняю GET через Postman.
У меня вопрос: «Можно ли заставить TestServer использовать базу данных sql-server и как это сделать?»
Я нашел здесь похожий вопрос вызовите тестовый сервер api: тесты интеграции 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;"
Да, возможно, если вы хотите увидеть полную настройку, посмотрите этот ответ: https://stackoverflow.com/a/54858071/2482439
В этом примере используется база данных SQLite, но вы можете изменить конфигурацию DatabaseType для использования SQL Server или любого другого.
Помните, что файлы конфигурации должны находиться в папке тестового проекта, в котором в настоящее время выполняются тесты, область действия, путь определяется этим. Итак, если у вас есть Project.Integration.Tests, в корневой папке должны быть строки подключения.Development.json и appsettings.Development.json.
Кроме того, вы, вероятно, должны установить required true для тех конфигураций, которые вам действительно нужны.