我正在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模板中正常工作。此外,此代码以前在dnx的RC1中工作,但是现在我将所有内容更新为RC2和Core CLI,它不再能够找到appsettings.json
xunit类库根目录中的文件。
这是我的测试类的外观,因此您可以看到我如何调用配置:
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
。查看模式存储以获取详细信息。
"buildOptions": {
"copyToOutput": {
"include": [ "appsettings.json" ]
}
},
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句