Question impossible de lire les appsettings lors des tests unitaires


J'ai une application console C #. Une de ses fonctions de lecture appconfig valeur et faire du travail.

string host = ConfigurationManager.AppSettings["Host"]  

J'ai donc écrit NUNIT test pour mon application console. Le projet de test unitaire a été créé avec la bibliothèque de classes.

Mais mon test unitaire échoue maintenant. Parce qu'il ne lit pas mes paramètres d'application (indique l'absence de paramètres d'application). Quelle est la raison pour ça.
Lorsque je lance mon application console, il lit correctement les paramètres de l'application.


15
2018-06-06 06:28


origine


Réponses:


Vous devriez avoir un app.config créé pour votre projet de test unitaire. Le fichier app.config de votre application console ne sera pas consulté lorsque vous exécuterez les tests unitaires.


29
2018-06-06 06:29



Bien que vous puissiez définir les paramètres de l'application dans un autre fichier de configuration pour votre projet de test unitaire, les tests unitaires sur les interfaces utilisant l'injection de dépendance peuvent aider à décomposer les zones que vos tests unitaires couvriront en parties plus faciles à gérer.

Vous pourriez donc avoir votre interface de configuration comme:

public interface IConfiguration
{
    public string Host { get; set; }
}

votre classe à tester accepterait une classe IConfiguration comme paramètre (généralement à votre constructeur) comme ceci:

public class MyClass
{
    IConfiguration _config;
    public MyClass(IConfiguration config)
    {
        _config = config;
    }

    public void MyMethodToTest()
    {
    }
}

Ensuite, votre test peut utiliser l'interface pour transmettre la configuration plutôt que de dépendre d'un fichier de configuration externe pouvant potentiellement changer et affecter votre test unitaire:

[Test]
public void Testing_MyMethodToTest()
{
    // arrange
    var config = new Configuration { Host = "My Test Host" };
    // act
    new MyClass(config).MyMethodToTest();
    // Add assertion for unit test
}

Et votre implémentation réelle créerait votre classe de configuration, la chargerait avec les valeurs des appsettings et la transmettrait à votre implémentation.


11
2018-06-06 06:44