L'environnement:
J'ai actuellement trois projets dans ma solution:
Les dépendances dans mon projet de test sont toutes de NuGet:
Le problème:
La bibliothèque standard .NET repose sur la présence d'un fichier app.config dans toute application qui l'utilise. Il utilise ConfigurationSection et ConfigurationElement attributs pour mapper les valeurs à une classe, très similaire à cette réponse: ne section de configuration personnalisée avec des collections imbriquées
L'application de console .NET Core contient un fichier app.config, et la bibliothèque est capable d'analyser très bien les valeurs et de les utiliser. Yay.
En revanche, l'application console NUnit contient le même fichier app.config, mais la bibliothèque ne semble pas le voir. Dès qu'il essaie de lire une valeur en utilisant ConfigurationManager.GetSection("...")
il retourne null
.
Quelqu'un a-t-il obtenu un fichier app.config pour fonctionner avec NUnit3 dans un environnement comme celui-ci?
Ce que j'ai essayé:
Il semble comme il prend en charge les fichiers de configuration , mais je ne sais pas si les documents font référence à un fichier de configuration NUnit spécial ou à un fichier app.config.
J'ai également essayé quelques choses dans le test que j'ai écrit jusqu'à présent, pour tenter de définir le fichier de configuration d'une manière ou d'une autre, comme une suggestion d'utiliser AppDomain.CurrentDomain.SetData()
(n'a pas fonctionné, peut-être parce que NUnit3 ne fonctionne pas) t supporte AppDomain):
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Path\To\My\Tests\my_test_project_name.dll.config");
Bien qu'il existe des tests dans le référentiel NUnit qui semblent suggérer l'utilisation d'un fichier de configuration dans NUnit3 est possible , ce fichier de test particulier n'est référencé que dans le projet de démonstration .NET 4.5 , pas le . NET Core demo project .
Lorsque vous exécutez la ligne suivante dans un test unitaire et inspectez son résultat, vous pouvez remarquer que le projet NUnit recherche un fichier de configuration appelé testhost.dll.config
.
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
Chemin raccourci:
ClassLibrary1\NUnitTestProject1\bin\Debug\netcoreapp2.2\testhost.dll.config
Ainsi, j'ai créé un exemple d'utilisation d'un fichier de configuration avec ASP.NET Core 2.2 et le modèle NUnit Test Project. Assurez-vous également que le paramètre Copier dans le répertoire de sortie du fichier de configuration est défini sur 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>
Pour un projet testhost.dll.config
fonctionne bien.
Pour un autre projet, j'ai dû utiliser testhost.x86.dll.config
La solution de (prd) a été très utile pour vérifier le chemin réel utilisé
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
https://github.com/dotnet/corefx/issues/22101
Copiez app.config avec le nom correct
<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>
Ce fut une autre solution intéressante
<None Update="App.config">
<Link>testhost.x86.dll.config</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>