我正在为ASP.NET Core WebAPI创建集成测试。我正在尝试使TestServer使用real,而不是在内存中,sql-server数据库。
第一个问题是,WebHostBuilder没有在“connectionstring.json”中看到连接字符串,所以我将连接字符串cofnig移动到“appsettings.json”。现在,WebHostBuilder从appsettings.json文件加载连接字符串,但在执行查询时它不会从sql-server数据库加载任何数据(返回空集合)。当我正常运行它(不是作为测试服务器)并通过Postman进行GET时,它确实如此。
我的问题是:“是否可以让TestServer使用sql-server数据库以及如何操作?”
我在call api Test server : .net core API integration tests找到了一个类似的问题,但是没有答案如何让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;"
答案 0 :(得分:0)
是的,如果您想查看完整的设置,可以查看以下答案:https://stackoverflow.com/a/54858071/2482439
在示例中,使用的数据库是SQLite,但是您可以将DatabaseType配置更改为使用SQL Server或其他任何数据库。
请记住,配置文件必须位于当前正在执行测试的测试项目的文件夹中,作用域,路径由该文件夹定义。 因此,如果您具有Project.Integration.Tests,则在根文件夹中需要具有connectionstrings.Development.json和appsettings.Development.json。
此外,您可能应该为真正需要的那些设置设置required true。