環境:
現在、私のソリューションには3つのプロジェクトがあります。
私のテストプロジェクトの依存関係はすべてNuGetによるものです。
問題:
.NET標準ライブラリは、それを使用するすべてのアプリケーションに存在するapp.configファイルに依存しています。 ConfigurationSection および ConfigurationElement 属性を使用して、値をクラスにマッピングします。これは、この回答と非常によく似ています。 ネストされたコレクションを持つカスタム構成セクション
.NET Coreコンソールアプリにはapp.configファイルが含まれており、ライブラリはその中の値を正常に解析して使用できます。わーい。
一方、NUnitコンソールアプリには同じapp.configファイルが含まれていますが、ライブラリからは見えません。 ConfigurationManager.GetSection("...")
を使用して値を読み取ろうとするとすぐに、null
が返されます。
このような環境でNUnit3を使用するためにapp.configファイルを取得した人はいますか?
私が試したこと:
それはそれは設定ファイルをサポートします のように見えますですが、ドキュメントが特別なNUnit設定ファイルまたはapp.configファイルを参照しているかどうかはわかりません。
また、これまでに書いた1つのテストで、AppDomain.CurrentDomain.SetData()
を使用するよう提案するなど、なんらかの方法で構成ファイルを設定しようとしました(NUnit3が機能しないために機能しませんでした) t AppDomainをサポート):
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Path\To\My\Tests\my_test_project_name.dll.config");
NUnit3で設定ファイルを使用することは可能です を示唆するように見えるNUnitリポジトリ内のテストがありますが、その特定のテストファイルは 。NET 4.5デモプロジェクト でのみ参照されます、 。NET Coreデモプロジェクト ではありません。
単体テスト内で次の行を実行してその結果を調べると、NUnitプロジェクトがtesthost.dll.config
という構成ファイルを探していることがわかります。
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
パスが短縮されました:
ClassLibrary1\NUnitTestProject1\bin\Debug\netcoreapp2.2\testhost.dll.config
これにより、ASP.NET Core 2.2とNUnit Test Projectテンプレートで構成ファイルを使用する方法の例を作成しました。また、設定ファイルのCopy to Output Directory設定がCopy always
に設定されていることを確認してください。
UnitTest.cs
public class UnitTest
{
private readonly string _configValue = ConfigurationManager.AppSettings["test"];
[Test]
public void Test()
{
Assert.AreEqual("testValue", _configValue);
}
}
testhost.dll.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="test" value="testValue" />
</appSettings>
</configuration>
1つのプロジェクトの場合testhost.dll.config
は正常に機能しています。
別のプロジェクトでは、testhost.x86.dll.config
(prd)からのソリューションは、使用されている実際のパスを確認するのに非常に役立ちました
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
https://github.com/dotnet/corefx/issues/22101
App.configを正しい名前でコピーします
<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
<Copy SourceFiles="app.config" DestinationFiles="$(OutDir)\testhost.dll.config" />
</Target>
<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
<Copy SourceFiles="App.config" DestinationFiles="$(OutDir)\testhost.x86.dll.config" />
</Target>
これは別の興味深い解決策でした
<None Update="App.config">
<Link>testhost.x86.dll.config</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>