【发布时间】:2019-08-27 17:49:19
【问题描述】:
环境:
目前我的解决方案中有三个项目:
- 一个 .NET Standard 2.0 库,其中包含一些我想测试的代码。
- 一个 .NET Core 2.2 控制台应用程序,它引用该库以确保其正常工作。
- 使用 VS 中的“NUnit 测试项目”模板创建的 .NET Core 2.2 控制台应用。
我的测试项目中的依赖都来自NuGet:
- 起订量版本="4.10.1"
- nunit" 版本="3.11.0"
- NUnit.ConsoleRunner" Version="3.10.0"
- NUnit3TestAdapter" Version="3.13.0"
- Microsoft.NET.Test.Sdk" Version="16.0.1"
问题:
.NET 标准库依赖于存在于任何使用它的应用程序中的 app.config 文件。它使用ConfigurationSection 和ConfigurationElement 属性将值映射到一个类,非常类似于这个答案:A custom config section with nested collections
.NET Core 控制台应用程序中有一个 app.config 文件,该库能够很好地解析其中的值并使用它们。耶。
另一方面,NUnit 控制台应用程序中包含相同的 app.config 文件,但库似乎看不到它。一旦它尝试使用ConfigurationManager.GetSection("...") 读取一个值,它就会返回null。
有没有人得到一个 app.config 文件来在这样的环境中使用 NUnit3?
我的尝试:
它似乎像it supports config files,但我不确定文档是指一些特殊的 NUnit 配置文件还是 app.config 文件。
- 我尝试将 app.config 重命名为 my_test_project_name.dll.config
- 我将配置文件“复制到输出目录”设置为“始终复制”
- 我尝试了所有我能想到的相似名称(app.config、App.config、my_test_project_name.config、my_test_project_name.dll.config 等)
到目前为止,我还在我编写的一个测试中尝试了一些东西,尝试以某种方式设置配置文件,例如使用AppDomain.CurrentDomain.SetData() 的建议(没用,可能是因为 NUnit3 没有支持AppDomain):
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Path\To\My\Tests\my_test_project_name.dll.config");
虽然 NUnit 存储库中的测试似乎暗示了 using a configuration file in NUnit3 is possible,但该特定测试文件仅在 .NET 4.5 demo project 中引用,而不是在 .NET Core demo project 中引用。
【问题讨论】:
-
NUnit 控制台运行程序不适用于 .NET Core 或 .NET Standard,只能用于基于 .NET Framework 的测试。目前还不清楚为什么你要同时使用 NUnit 控制台和 NUnit 测试适配器。
-
如果您想测试 .NET Standard 库,那么为什么需要 app.config - 只需通过自己的 IConfiguration 实现提供所需的值(例如模拟)。如果您想测试该 .NET Standard 库是否与控制台应用程序一起正常工作 - 测试您的控制台应用程序 - 端到端测试。据我了解,.NET 标准库不应该知道 app.config 文件。
标签: c# .net-core nunit app-config nunit-3.0