无法让 ConfigurationBuilder 从 ASP.NET Core 1.0 RC2 中的 xunit class 库中的 appsettings.json 中读取
Unable to get ConfigurationBuilder to read from appsettings.json in xunit class library in ASP.NET Core 1.0 RC2
我正在尝试在 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 class 根目录中的 appsettings.json
文件图书馆。
这是我的测试 class 的样子,因此您可以看到我是如何调用配置的:
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);
}
}
这是一个简单的问题,你需要让appsetting.json
也存在于xunit项目下。或者您需要使用指向 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" ]
}
},
为@DavidPine 的回答添加更多信息
不知何故,相对路径对我不起作用,所以我是这样做的。
var builder = new ConfigurationBuilder()
.SetBasePath(Path.GetFullPath(@"../XXXX")).AddJsonFile("appsettings.json");
我的是.net core 1.0.0-preview1-002702
我正在尝试在 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 class 根目录中的 appsettings.json
文件图书馆。
这是我的测试 class 的样子,因此您可以看到我是如何调用配置的:
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);
}
}
这是一个简单的问题,你需要让appsetting.json
也存在于xunit项目下。或者您需要使用指向 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" ]
}
},
为@DavidPine 的回答添加更多信息
不知何故,相对路径对我不起作用,所以我是这样做的。
var builder = new ConfigurationBuilder()
.SetBasePath(Path.GetFullPath(@"../XXXX")).AddJsonFile("appsettings.json");
我的是.net core 1.0.0-preview1-002702