0

我以前使用过这个配置很多次,从来没有遇到过任何问题,所以我把我的项目剥离了基础。我将 Specflow 与 Specrun 一起使用,而 specrun 部分是唯一发生变化的部分。

我正在尝试使用位于 my.net 核心 bin 基本目录中的 appsettings.json 文件配置 serilog 记录器。\bin\Debug\netcoreapp3.1

以前我可以只引用没有基本路径的路径的 appsettings,但是当我从 NUnit 移动到 Specflow 时,这种情况发生了变化。仍然使用basepath仍然可以找到位置。但是,当我尝试创建记录器并使用 readfrom 时,它是从一个奇怪的位置引用 appsettings 文件,而不是我刚刚设置的配置变量中的 ConfigurationRoot。

下面是两个设置变量。第一个用于 appsettings 的配置根目录,第二个用于 serilog 记录器。第一个是成功的,它给了我看起来是一个有效的 IConfiguration 对象。第二个是错误发生的地方。这个错误是“System.IO.FileNotFoundException:'找不到文件'\bin\Debug\netcoreapp3.1\SpecFlowPlusRunner\netcoreapp3.1\TechTalk.SpecRun.Framework.Executor.anycpu.netcoreapp3_1.deps.json'。'”

var configuration = new ConfigurationBuilder()
            .SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
            .AddJsonFile("appsettings.json")
            .Build();
        var logger = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .CreateLogger();

一些额外的注意信息。这是一个 netcore 3.1 应用程序的代码在包含的 specflow 类包中执行。

<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.6" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.6" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.6" />
    <PackageReference Include="Serilog" Version="2.9.0" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
    <PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
    <PackageReference Include="Serilog.Sinks.Seq" Version="4.0.0" />
    <PackageReference Include="SpecFlow" Version="3.3.57" />
    <PackageReference Include="SpecFlow.NetCore" Version="1.3.5" />
    <PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.3.57" />
    <PackageReference Include="SpecRun.SpecFlow" Version="3.3.41" />
4

1 回答 1

0

我假设您的配置基本路径是错误的。Assembly.GetExecutingAssembly()可能正在返回子文件夹中包含的 SpecFlow+ Runner 程序集之一SpecFlowPlusRunner

要获取测试程序集所在的文件夹,我们有一个 API TestRunContext.TestDirectory:( https://docs.specflow.org/projects/specflow-runner/en/latest/Usage/SpecFlow-Runner-APIs.html#string-测试目录获取)。

这样,您应该获得 appsettings.json 所在的正确文件夹。


全面披露:我是 SpecFlow 和 SpecFlow+ 的开发人员之一。

于 2020-08-03T14:39:27.057 回答