2010-11-01 10 views
1

J'ai une classe pour laquelle j'ai remplacé les opérateurs .Equals(), ==,! =, + Et%. Clairement, je veux tester si tout fonctionne bien. Ce qui est assez marrant, c'est que le test de l'addition '+' réussit dans un programme, mais échoue, quand on utilise un vrai UnitTest!Tests unitaires pour C# dans Visual Studio - Assert.AreEqual

dans le programme:

 Stats a = new Stats(); 
     Stats b = new Stats(); 
     Stats expected = new Stats(); 
     Stats actual = new Stats(); 

     a.AC = 5; 
     b.AC = 10; 
     expected.AC = 15; 

     actual = a + b; 
     bool r1 = (expected == actual);  //true 
     bool r2 = expected.Equals(actual); //true 

En UnitTest:

 Stats a = new Stats(); 
     Stats b = new Stats(); 
     Stats expected = new Stats(); 
     Stats actual = new Stats(); 

     a.AC = 5; 
     b.AC = 10; 
     expected.AC = 15; 

     actual = a + b; 
     Assert.AreEqual(expected, actual); 

test ne réussit pas.

Il semble que je ne reçois pas quelque chose ici ... Qui peut aider?

Meilleures salutations, Christian

+0

http://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx –

+0

Si vous mettez au point le test de l'unité en cours, la valeur du champ est-elle correcte? Et avez-vous marché dans AreaEqual pour voir ce qu'il finit par appeler. –

+0

Hmm, il semble que le débogueur ignore juste mes points d'arrêt dans ma classe de test ... – Christian78

Répondre

0

Il est recommandé que toute classe qui l'emporte sur Equals également passer outre System.Object.GetHashCode. Ref

+0

public override int GetHashCode() { return AC; } – Christian78

+0

public override int GetHashCode() { return AC; } – Christian78

0

Résolu. Le débogage (CTRL + R, CTRL + T) m'a montré que UnitTest utilisait une ancienne version de ma classe. Après avoir sauvagement reconstruit, il a utilisé la version actuelle pour les tests. C'est très ennuyeux, mais je suis sûr que je trouverai un moyen de m'assurer que le test d'unité ne teste que la version la plus actuelle de chaque classe.

Merci les gars!