gpt4 book ai didi

asp.net - 无法让 ConfigurationBuilder 从 ASP.NET Core 1.0 RC2 中的 xunit 类库中的 appsettings.json 读取

转载 作者:行者123 更新时间:2023-12-02 11:54:50 25 4
gpt4 key购买 nike

我正在尝试在 XUnit 项目中执行以下操作,以获取我的测试应使用的数据库的连接字符串:

public class TestFixture : IDisposable
{
public IConfigurationRoot Configuration { get; set; }
public MyFixture()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
}

public void Dispose()
{
}
}

这很奇怪,因为当在 Startup.cs 中使用时,它在 WebAPI 和 MVC 模板中完美运行。此外,此代码之前可以在 RC1 中使用 dnx 运行,但现在我将所有内容更新到 RC2 和 Core CLI,它不再能够找到 xunit 根目录中的 appsettings.json 文件类库。

这是我的测试类的样子,这样您就可以看到我如何调用配置:

public class MyTests : IClassFixture<MyFixture>
{
private readonly MyFixture _fixture;
public MyTests(MyFixture fixture)
{
this._fixture = fixture;
}

[Fact]
public void TestCase1()
{
ICarRepository carRepository = new CarRepository(_fixture.Configuration);
}
}

最佳答案

这是一个简单的问题,您需要在xunit项目下也存在appsetting.json。或者您需要使用指向另一个项目中存在 appsettings.json 的相对路径。

public class TestFixture : IDisposable
{
public IConfigurationRoot Configuration { get; set; }
public MyFixture()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("../../OtherProj/src/OtherProj/appsettings.json",
optional: true, reloadOnChange: true);
Configuration = builder.Build();
}

public void Dispose() { }
}

理想情况下,您只需在测试项目本地拥有自己的配置文件即可。在我的 ASP.NET Core RC2 数据库测试项目中,我的装置如下所示:

public DatabaseFixture()
{
var builder =
new ConfigurationBuilder()
.AddJsonFile("testsettings.json")
.AddEnvironmentVariables();
// Omitted...
}

其中 testsettings.json 是项目本地的测试特定配置。

更新

在您的 project.json 中,确保将 appsettings.json 标记为 copyToOutput。看schema store了解详情。

"buildOptions": {
"copyToOutput": {
"include": [ "appsettings.json" ]
}
},

关于asp.net - 无法让 ConfigurationBuilder 从 ASP.NET Core 1.0 RC2 中的 xunit 类库中的 appsettings.json 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37479643/

25 4 0