.net标准ConfigurationManager打开错误的app.config

时间:2017-11-08 15:00:58

标签: c# unit-testing .net-core .net-standard

我正在尝试通过.net标准项目从.net核心单元测试项目运行测试方法,并在加载测试项目中的配置文件时(因为这是当前正在执行的程序集)。我使用当前文件路径“C:\ Users \ xxx \ .nuget \ packages \ microsoft.testplatform.testhost \ 15.3.0-preview-20170628-02 \ lib \ netstandard1.5 \ testhost”获取了错误的配置文件。 dll.config“

 var conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

2 个答案:

答案 0 :(得分:1)

您可以选择指向另一个配置文件。消息来源归功于Ron Hagerman的answer只做了一些修改。以下xunit测试可能有助于理解如何设置位置。令人沮丧的是.net核心单元测试在以下目录中的testhost.dll.config文件中查找连接字符串

<强> C:\ Users \ [用户名] \的NuGet \包\ microsoft.testplatform.testhost \ [版] \ lib中\ netstandard1.5 \ testhost.dll.config

[Fact]
public void AccessAppSettings_ConnectionString()
{
     //obtain the current directory for the executable
     Uri UriAssemblyFolder = new Uri(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly()
                                           .GetName().CodeBase));
     string appPath = UriAssemblyFolder.LocalPath;
     //Change the "DataProvider.Tests.dll" to whatever your 
     //library or executable name. 
     //Note: Configuration manager will add the .config extension
     Configuration config = ConfigurationManager
            .OpenExeConfiguration(appPath + @"\" + "DataProvider.Tests.dll");

     ConnectionStringsSection section = 
                  config.GetSection("connectionStrings") as ConnectionStringsSection;

     string expectedString = $"Data Source=mysqliteDBName.sqlite3";
     //Change "mySqliteConnectionString" to your connection string name   
     var sut_connectionString = 
                 section.ConnectionStrings ["mySqliteConnectionString"].ConnectionString;

      Assert.NotNull(sut_connectionString);
      Assert.Contains(expectedString, sut_connectionString);

示例配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <connectionStrings>
        <add name="mySqliteConnectionString" connectionString="Data Source=mysqliteDBName.sqlite3" />
        <add name="otherConnectionString" connectionString="Data Source=othersqliteDBName.sqlite3" />
    </connectionStrings>
</configuration>

答案 1 :(得分:0)

我不认为你错了。您正在运行测试项目的配置文件,这是正确的,因为您正在运行测试项目。

每个项目都有自己的配置文件或没有。它不能只是加载另一个项目的配置文件。

底线是:只需将您想要的.net标准项目配置文件中的任何特定配置复制到单元测试的配置文件中。