TestServer使用真正的sql数据库

时间:2018-05-01 10:53:39

标签: c# sql-server asp.net-core-2.0 asp.net-core-webapi

我正在为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;"

1 个答案:

答案 0 :(得分:0)

是的,如果您想查看完整的设置,可以查看以下答案:https://stackoverflow.com/a/54858071/2482439

在示例中,使用的数据库是SQLite,但是您可以将DatabaseType配置更改为使用SQL Server或其他任何数据库。

请记住,配置文件必须位于当前正在执行测试的测试项目的文件夹中,作用域,路径由该文件夹定义。 因此,如果您具有Project.Integration.Tests,则在根文件夹中需要具有connectionstrings.Development.json和appsettings.Development.json。

此外,您可能应该为真正需要的那些设置设置required true。