环境:
我的解决方案中目前有三个项目:
我的测试项目中的依赖项全部来自NuGet:
问题:
.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文件。
在到目前为止编写的一个测试中,我还尝试了一些尝试,尝试以某种方式设置配置文件,例如,建议使用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中引用。
答案 0 :(得分:4)
在单元测试中执行以下行并检查其结果时,您可能会注意到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 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 :(得分:1)
Rider 版本 > 2020.2 及更高版本查找 form-group
。因此,要扩展 Nathan Smith 的答案,请使用 ReSharperTestRunner64.dll.config
并复制它:
App.config
答案 2 :(得分:0)
对于一个项目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>
答案 3 :(得分:0)
我之所以选择这篇文章,是因为由于app.config错误,在Net.Core测试项目中从Resharper运行NUnit测试时出现了问题。
设置Resharper>选项>单元测试>常规>向Trace记录日志条目的严重性不会提供太多有用的信息。 我安装了Microsoft.NET.Test.Sdk和NUnit3TestAdapter来从VS Test Explorer运行测试,它告诉我配置文件中到底是什么错误。
app.config文件的内容会自动添加到输出目录 if 中的yourTestProjectName.dll.config:
该文件名为app.config
或csproj中有一个
,或者指向配置文件的链接,例如:
如果属性或csproj较新,则无需设置要复制的配置文件的输出。
如果config.file的内容存在问题,则测试最终将因该错误而没有结果:
ReSharper Ultimate – System.NullReferenceException: Object reference not set to an instance of an object.
at NUnit.Engine.Internal.ServerBase.Start()
答案 4 :(得分:-1)
当我在import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://www.snopes.com/fact-check/michael-novenche/')
soup = bs(r.content, 'lxml')
data = soup.select_one('p:has(>[href="http://web.archive.org/web/20040330161553/http://newyork.local.ie/content/31666.shtml/albany/news/newsletters/general"])').encode_contents().split(soup.select_one('[href="http://web.archive.org/web/20040330161553/http://newyork.local.ie/content/31666.shtml/albany/news/newsletters/general"]').encode_contents())
items = [bs(i, 'lxml').select_one('p').text for i in data]
print(items)
测试项目中拥有App.config
文件时,我遇到了同样的问题,我将NUnit
重命名为App.config
,然后开始读取配置文件值。