c# - 使用 HttpServer 测试 ASP.NET WebAPI 中的 ConfigurationManager

标签 c# asp.net-web-api web-config integration-testing

我有一个 Web API 项目,我试图通过使用 HttpServer 的内存托管来测试它。

我的服务器正在运行,但请求返回 500 InternalServerError 响应。
当我尝试使用 ConfigurationManager 获取连接字符串时执行失败,在调试期间我可以看到 ConfigurationManager.ConnectionStrings 不包含给定键的值。
相反,它包含一些“默认”连接字符串。

{
    "LocalSqlServer": "data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"`
}

Web.config 文件包含键为“my-database”的连接字符串

<configuration>
  <connectionStrings>
    <add name="my-database" providerName="System.Data.SqlClient" 
     connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\hotel.mdf;Integrated Security=True" />
  </connectionStrings>
</configuration>

失败的代码

public class Database
{
    public static SqlConnection CreateConnection()
    {
        var connectionString = 
            ConfigurationManager.ConnectionStrings["my-database"].ConnectionString; // Fails here with NullReference exception
        return new SqlConnection(connectionString);
    }
}

HttpServer 配置和测试

public class ServerTest : IDisposable
{
    private readonly HttpServer _server;

    public ServerTest()
    {
        var config = new HttpConfiguration();         
        WebApiConfig.Register(config); // Call configuration from system under the test
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

        _server = new HttpServer(config);
    }

    public void Dispose() => _server.Dispose();

    [Fact]
    public async Task ReturnsOk()
    {
        var client = new HttpClient(_server)
        {
            BaseAddress = new Uri("http://dummy.testing.api/")
        };

        var response = await client.GetAsync("rooms");

        response.StatusCode.Should().Be(HttpStatusCode.OK);
    }
}

如何配置 HttpServer 以使用实际配置(连接字符串)?

最佳答案

鉴于所提供的详细信息,我无法确定,但您是否将代码作为控制台应用程序运行?看来您可能正在将其作为某种 xUnit 测试来运行?无论如何,您可能需要确保在您工作的任何项目中都有一个“app.config”文件(而不是 web.config)。

关于c# - 使用 HttpServer 测试 ASP.NET WebAPI 中的 ConfigurationManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57525555/

相关文章:

c# - ExportToExcel 中的 NumberFormat 根据文化

c# - 头孢夏普 winforms : Inject jquery into page

C# LocalReport 更改文本框位置

javascript - Web Api 属性路由无法访问带有问号和与号的数据的方法

web-services - 在 Clojure Ring REST-like API 中处理错误?

c# - IIS 无法启动?

asp.net-mvc-4 - 在Web API中返回自定义错误对象

asp.net - Web.config 中的斜杠

c# - 我是否需要 web.config 值配置 -> 运行时 -> System.Web.Extensions 的 assemblyBinding?

reactjs - 在 REACTJs 项目中使用多个 web.config 文件进行 qa、dev 和 prod