我正在尝试通过.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);
答案 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标准项目配置文件中的任何特定配置复制到单元测试的配置文件中。