0

我有一个使用 XUnit 访问数据库的集成测试。我们需要能够从 app.config 文件中获取数据库连接字符串。

从 IDE 运行测试时,它运行良好,并且找到了连接字符串。当我从 cake.build 自动运行测试时 ConfigurationManager.ConnectionStrings["blahblah"] ret

var connectionStringSettings = ConfigurationManager.ConnectionStrings["FlexConnString"];
if (connectionStringSettings == null)
    {
        Console.WriteLine("ConfigManager does not return a setting for FlexConnString");
        _connectionString = "No Connection string";
    } 

蛋糕任务是

Task("Run-Integration-Tests")
.IsDependentOn("Run-Unit-Tests")
.Does(() =>
{
    var testDir = "./artifacts/_tests/**/*.IntegrationTests.dll";
    Information("Start Running Integration Tests in " + testDir);
    XUnit2(testDir,
        new XUnit2Settings {
            Parallelism = ParallelismOption.All,
            HtmlReport = true,
            NoAppDomain = true,
            NUnitReport = true,
            XmlReport = true,
            ReportName = "MixTdiIntegrationTestResults",
            OutputDirectory = "./artifacts"
       });
});

从 powershell 运行 build.cake 时,此输出 ConfigManager 不会返回 FlexConnString' 的设置。

我不确定这是 XUnit 问题还是 Cake 问题。

4

1 回答 1

2

当您运行 Xunit test 时,它会在当前工作目录中查找配置文件,您可以轻松检查它

Information("Current Directory: {0}", System.IO.Directory.GetCurrentDirectory());

并且找不到它,您需要在XUnit2Settings中指定WorkingDirectory到带有连接字符串配置文件的文件夹

XUnit2(testDir,
    new XUnit2Settings {
        Parallelism = ParallelismOption.All,
        HtmlReport = true,
        NoAppDomain = true,
        NUnitReport = true,
        XmlReport = true,
        ReportName = "MixTdiIntegrationTestResults",
        OutputDirectory = "./artifacts",
        WorkingDirectory = "[your config file path]"
   });

需要提到的另一个选项是更改您当前的工作目录

Environment.CurrentDirectory = "c:/";
于 2017-06-01T20:03:46.400 回答