【问题标题】:Retrieving connection string in integration test在集成测试中检索连接字符串
【发布时间】:2018-08-14 15:14:34
【问题描述】:

我正在尝试为我的 asp.net Core 2.1 项目做一些集成测试。

我在启动文件中初始化了我的连接字符串,但是当我运行测试时它在处理程序中仍然为空,我的代码有什么问题?

    [TestMethod]
    public async Task Method1()
    {
        var webHostBuilder = new WebHostBuilder()
                            .UseEnvironment("Development") 
                            .UseStartup<Startup>(); 
        HttpRequestMessage getRequest = new HttpRequestMessage(HttpMethod.Get, "api/action")
        {                
        };
        getRequest.Headers.Add("userId", "4622");
        getRequest.Headers.Add("clientId", "889");

        using (var server = new TestServer(webHostBuilder))
        using (var client = server.CreateClient())
        {
            var result = await client.SendAsync(getRequest);  
            ...             
        }
   }

启动

public Startup(IConfiguration configuration)
{
        Configuration = configuration;

}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
    ...
    services.Configure<SqlConfig>(options =>
    {
       options.ConnectionString = Configuration.GetConnectionString("DefaultConnection");
    });
    ...
}

SqlConfig

public class SqlConfig
{
    public string ConnectionString { get; set; }
}

存储库

public abstract class SqlServerQueryHandler<TQuery, TResult> : BaseQueryHandler<TQuery, TResult>
     where TQuery : IQuery<TResult>
{
   public SqlServerQueryHandler(IOptions<SqlConfig> connectionString)
    {
        this.ConnectionString = connectionString.Value.ConnectionString;
    }

   protected string ConnectionString { get; }
}

【问题讨论】:

  • 配置是如何创建的?
  • @Nkosi 如果我理解你的问题,配置是在启动文件执行时创建的,这个文件是在我创建 WebHostBuilder 实例时执行的
  • 创建配置的方式有多种,但您还没有在启动课程中展示它是如何进行的。这就是为什么我不得不问。是注入还是手动初始化?
  • 我指的是IConfiguration Configuration
  • @Nkosi 我更新了我的帖子,你可以看看

标签: integration-testing mstest cqrs c#-7.0 asp.net-core-2.1


【解决方案1】:

解决我的问题的是以下代码:

public class TestStartup : Startup
{
    public TestStartup(IConfiguration configuration, IHostingEnvironment env) : base(configuration)
    {
        var builder = new ConfigurationBuilder()
           .SetBasePath(env.ContentRootPath)
           .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
           .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
           .AddEnvironmentVariables();
        this.Configuration = builder.Build();
    }

通过接口在输出目录中包含appsettings.json

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2021-09-30
    • 2011-07-24
    相关资源
    最近更新 更多