Не удалось получить ConfigurationBuilder для чтения из appsettings.json в библиотеке классов xunit в 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()
{
}
}
Это очень странно, потому что он отлично работает в шаблонах WebAPI и MVC при использовании в Startup.cs. Кроме того, этот код ранее работал в RC1 с dnx, но теперь, когда я обновил все до 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);
}
}
Ответы
Ответ 1
Это простая проблема, вам нужно, чтобы 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" ]
}
},
Ответ 2
Чтобы добавить дополнительную информацию для ответа @DavidPine
Как-то относительный путь для меня не работает, вот как я это делаю.
var builder = new ConfigurationBuilder()
.SetBasePath(Path.GetFullPath(@"../XXXX")).AddJsonFile("appsettings.json");
Mine is.net core 1.0.0-preview1-002702