IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Ligne de commande et NUnit


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Expert technique .NET
    Inscrit en
    Août 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Expert technique .NET

    Informations forums :
    Inscription : Août 2007
    Messages : 272
    Points : 530
    Points
    530
    Par défaut Ligne de commande et NUnit
    Bonjour,

    J'ai un petit souci avec NUnit : j'ai fait une DLL regroupant diverses méthodes (de base de données, mais peu importe) dont le résultat dépend des arguments de la ligne de commande.
    J'essaie donc simuler une ligne de commande de la façon qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [Test, Description("Connexion à la base de TEST")]
    public void Test1_Connexion_Base_TEST()
    {
         Environment.SetEnvironmentVariable("CommandLine", "test_unitaire TEST /P0");
         Assert.IsTrue(BD.BaseConnectee);
    }
    Problème : quand je lance mes tests, la ligne de commande est toujours celle du lancement de NUnit, donc mon test ne marche pas.

    Please help !!!!!

    Pour info, j'utilise la dernière version de NUnit(2.4.7)

    Merci d'avance

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    alors, un petit test de chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Console.WriteLine("GetEnvironmentVariables: ");
    IDictionary environmentVariables = Environment.GetEnvironmentVariables();
    foreach (DictionaryEntry de in environmentVariables){
       Console.WriteLine("  {0} = {1}", de.Key, de.Value);
    }
    Tu ne trouveras pas la variable CommandLine dans les variables d'environnement


    Apres un coup de reflector, CommandLine appelle du code...natif...pas moyen de descendre + bas

    Je pense qu'une chose que tu devrais faire, c'est modifier ta dll, de facon a ce qu'elle appelle une classe que tu definis toi-meme, qui rappelle environment.CommandLine, et que tu injectes a l'execution (ou, mieux encore, soyons fous, tu ajoutes un initialiseur a ta classe, auquel tu passe la ligne de commande...)

    Genre, dans ta dll, tu as une classe statique EnvironmentWrapper, dans ce genre la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public static class EnvironmentWrapper{
     
    private static string _commandLine;
     
    public static string CommandLine
            {
                get { 
     
                   if (string.IsNullOrEmpty(_commandLine)) _commandLine = Environment.CommandLine; 
                   return _commandLine; 
                }
                set { _commandLine = value; }
            }
    }
    dans tes tests, tu ecris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [Test, Description("Connexion à la base de TEST")]
    public void Test1_Connexion_Base_TEST()
    {
     
         EnvironmentWrapper.CommandLine = "test_unitaire TEST /P0";
         Assert.IsTrue(BD.BaseConnectee);
    }
    et, dans BD.BaseConnectee, tu remplace les appels a Environment.CommandLine par EnvironmentWrapper.CommandLine


    Enfin, moi, c'est ce que je ferais

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre confirmé
    Profil pro
    Expert technique .NET
    Inscrit en
    Août 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Expert technique .NET

    Informations forums :
    Inscription : Août 2007
    Messages : 272
    Points : 530
    Points
    530
    Par défaut
    Merci pour ta réponse.

    Sinon, je viens de trouver une autre solution : utiliser une condition de compilation à mettre dans ma classe à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    using System.Diagnostics;
    ...
     
    #if DEBUG
    Commande = Environment.GetEnvironmentVariable("CommandLine").Split(' ')[1];
    #else
    Commande = Environment.GetCommandLineArgs()[1];
    #endif
    Par contre, ça m'oblige à faire mes tests unitaires en mode debug.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Encapsulation graphique d'un outil en ligne de commande
    Par Leishmaniose dans le forum Composants VCL
    Réponses: 3
    Dernier message: 12/11/2003, 11h59
  2. Comment compiler un projet en ligne de commande ?
    Par mathieutlse dans le forum EDI
    Réponses: 3
    Dernier message: 11/07/2003, 13h32
  3. Réponses: 3
    Dernier message: 07/04/2003, 20h06
  4. Récuperer Arguments sur la ligne de commande ?
    Par Muetdhiver dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 20/01/2003, 21h01
  5. Analyser la ligne de commande
    Par benj29 dans le forum C
    Réponses: 14
    Dernier message: 19/11/2002, 04h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo