15

我正在尝试在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,它不再能够找到appsettings.jsonxunit 类库根目录中的文件。

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

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);
    }
}
4

2 回答 2

20

这是一个简单的问题,您需要在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.jsoncopyToOutput. 查看模式存储以获取详细信息。

"buildOptions": {
  "copyToOutput": {
    "include": [ "appsettings.json" ]
  }
},
于 2016-05-27T11:52:07.847 回答
6

为@DavidPine 的回答添加更多信息

不知何故,相对路径对我不起作用,所以这就是我的做法。

var builder = new ConfigurationBuilder()
.SetBasePath(Path.GetFullPath(@"../XXXX")).AddJsonFile("appsettings.json");

我的是.net core 1.0.0-preview1-002702

于 2016-06-03T21:23:34.953 回答