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 :

[C# 2005] tests unitaires


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut [C# 2005] tests unitaires
    bonjour,

    je fais des tests très simples qui aboutissent à l'erreur "la référence d'objet n'est pas définie à une instance d'objet"...

    voici le code:

    weather_test
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using NUnit.Framework;
     
    namespace weather.test
    {
        [TestFixture]
        public class weather_test
        {
            weather_data ze_weather;
            double rec_temp, rec_hum, rec_pressure;
     
            [SetUp]
            public void setup()
            {
                weather_data ze_weather=new weather_data();
     
            }
     
            [Test]
            public void testof_getsetState()
            {
                ze_weather.setState(20.0, 80.0, 1.2);
                ze_weather.getState(out rec_temp,out rec_hum,out rec_pressure);
                Assert.AreEqual(rec_temp, 20.0);
                Assert.AreEqual(rec_hum, 80.0);
                Assert.AreEqual(rec_pressure, 1.2);
            }
     
     
        }
    }
    weather_data.cs
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace weather
    {
        public class weather_data
        {
            double temp=20;
            double hum=70;
            double pressure=1;
     
     
            public void setState(double ze_temp, double ze_hum, double ze_pressure)
            {
     
                temp = ze_temp;
                hum = ze_hum;
                pressure = ze_pressure;
            }
     
            public void getState(out double ze_temp, out double ze_hum, out double ze_pressure)
            {
     
                ze_temp=temp;
                ze_hum=hum;
                ze_pressure=pressure;
     
            }
     
     
        }
    }
    ce programme (weather_data) est une ébauche du design pattern observateur.
    le test consiste à tester une paire de get/set, en utilisant NUnit.

    merci,

    lolveley.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Dans la méthode setup, tu déclares une variable locale qui a le même nom que le membre ze_weather, donc dans cette méthode ze_weather fait référence à la variable locale. C'est donc la variable locale ze_weather qui est initialisée, et non le membre ze_weather, qui reste non-initialisé à la valeur nulle.

    ça devrait aller mieux comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            [SetUp]
            public void setup()
            {
                ze_weather=new weather_data();
     
            }

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    tomlev, merci de ta réponse.
    j'ai modifié le programme en ceci:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using NUnit.Framework;
     
    namespace weather.test
    {
        [TestFixture]
        public class weather_test
        {
            weather_data ze_weather;
            double rec_temp, rec_hum, rec_pressure;
     
            [SetUp]
            public void setup()
            {
                ze_weather = new weather_data();
     
            }
     
            [Test]
            public void testof_getsetState()
            {
                ze_weather.setState(20.0, 80.0, 1.2);
                ze_weather.getState(out rec_temp,out rec_hum,out rec_pressure);
                Assert.AreEqual(rec_temp, 20.0);
                Assert.AreEqual(rec_hum, 80.0);
                Assert.AreEqual(rec_pressure, 1.2);
            }
     
     
        }
    }
    mais si la compilation de la dll marche bien (au fait je n'ai pas enlevé le fichier program.cs avec main dedans), NUnit m'indique toujours une erreur de référence nulle.

    lolveley.

    PS: voici program.cs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace weather
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
        }
    }

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    bon, on peut déjà supposer que le problème n'est pas dans la méthode Program.Main puisqu'elle ne fait rien

    Après, je ne connais pas du tout NUnit, donc je sais pas trop... tu es sûr que la méthode setup est bien exécutée avant la méthode testof_getsetState ?
    Et l'exception ne te donne pas plus de détails ? il faudrait savoir sur quelle instruction elle se produit...

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    pour la méthode setup, je pense qu'elle est exécutée car si je mets l'initialisation avec la déclaration (weather_data ze_weather=new weather_data() ) j'ai quand même l'erreur de référence nulle.

    je testerai le code avec le débogueur... et te dirai le résultat.

    lolveley.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    voici une version qui marche:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using NUnit.Framework;
     
    namespace weather.test
    {
        [TestFixture]
        public class weather_test
        {
            //weather_data ze_weather;
     
     
            [SetUp]
            public void setup()
            {
     
            }
     
            [Test]
            public void testof_getsetState()
            {
                weather_data ze_weather = new weather_data();
                double rec_temp, rec_hum, rec_pressure;
                ze_weather.setState(20.0, 80.0, 1.2);
                ze_weather.getState(out rec_temp,out rec_hum,out rec_pressure);
                Assert.AreEqual(rec_temp, 20.0);
                Assert.AreEqual(rec_hum, 80.0);
                Assert.AreEqual(rec_pressure, 1.2);
            }
     
     
        }
    }
    j'avoue que je ne comprends pas trop pourquoi il faut faire comme ça... moi je pensais que weather_data pouvait être déklaré au début de la classe...

    si vous avez compris le pourquoi du comment, merci de me le dire!

    lolveley.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par olivier57b Voir le message
    j'avoue que je ne comprends pas trop pourquoi il faut faire comme ça... moi je pensais que weather_data pouvait être déklaré au début de la classe...
    Bizarre... surtout que d'après la doc, la méthode marquée avec l'attribut Setup est exécutée avant chaque test... Au fait, comment tu lances tes tests ? A partir de l'interface de NUnit ?

    Sinon, as-tu essayé de faire comme ça ?
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    using System;
    using System.Collections.Generic;
    using System.Text;
    using NUnit.Framework;
     
    namespace weather.test
    {
        [TestFixture]
        public class weather_test
        {
            weather_data ze_weather = new weather_data();
            double rec_temp, rec_hum, rec_pressure;
     
            [SetUp]
            public void setup()
            {
            }
     
            [Test]
            public void testof_getsetState()
            {
                ze_weather.setState(20.0, 80.0, 1.2);
                ze_weather.getState(out rec_temp,out rec_hum,out rec_pressure);
                Assert.AreEqual(rec_temp, 20.0);
                Assert.AreEqual(rec_hum, 80.0);
                Assert.AreEqual(rec_pressure, 1.2);
            }
     
        }
    }
    Si ça ne marche pas, c'est qu'il y a vraiment un problème... :S

Discussions similaires

  1. Test unitaire avec vs 2005
    Par epiouf dans le forum ASP.NET
    Réponses: 0
    Dernier message: 19/05/2009, 15h56
  2. [VS 2005] Les Tests Unitaires
    Par loverdose dans le forum Visual Studio
    Réponses: 3
    Dernier message: 07/05/2007, 19h25
  3. Tests unitaires en C#
    Par Bouboubou dans le forum Test
    Réponses: 2
    Dernier message: 01/10/2004, 13h03
  4. [TESTS] Tests unitaires
    Par mathieu dans le forum Test
    Réponses: 4
    Dernier message: 08/01/2004, 12h59

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