Je suis nouveau à des tests unitaires et à la nuit en particulier. Je sais juste quelques exemples du livre qui fait référence à Java et Junit. Mais j'utilise c # à la place.
Le problème est le suivant: j'ai une classe avec des méthodes de substitution telles que voici la classe: p> et la méthode de test elle-même: p> égale () code> et gethascode () code>, mais quand J'essaie de comparer deux objets de cette classe avec assert.arequal () code> mon code n'est pas appelé, alors je reçois une exception. P> assert.true (myClass .Equals (myClass2)) code> fonctionne bien. Mais je ne veux pas utiliser cette construction au lieu de assert.arequal () code>. Où peut-être le problème? P>
4 Réponses :
Le problème est que vous êtes caché em> égaux, pas primer em> it. Bien fait - votre test de l'unité a trouvé un bogue :) Votre code doit être: p> (Cela l'empêchera de lancer une exception si vous le faites mal Tapez aussi.) p> J'ai fabriqué le test d'égalité des chaînes plus simple, la surcharge de l'opérateur peut être très utile :) p> Au fait, vous voulez presque certainement: p> Edit: Je viens de relire que vous utilisez un exemple d'un livre. Le livre se cache-t-il vraiment au lieu de remplacer le
devise code> Pour être une propriété, pas une méthode li>
Montant Code> Propriété LI>
montant code> pour être décimal code> au lieu de int code> li>
fois code> li>
Equals code>? Je vous suggère d'obtenir un nouveau livre, si oui (à moins que ce ne soit un exemple délibéré de quand c'est mauvais em> à utiliser caché!) ... Quel livre est-ce? P> p>
C'est génial. Grand début à la journée.
Oui, c'est une décision! Merci beaucoup. J'ai lu "développement axé sur le test: par exemple" par Kent Beck. Les exemples sont écrits en Java, la définition de la méthode est la suivante: Bool public égal (objet d'objet); Mais j'écris C # Code, alors Ide-Helper m'a demandé si je voulais écrire "NOUVEAU PUBLIC NOOL BOOL EQUALES (objet O)" au lieu de "Bool Bool (Objet O)". Donc, c'est mon erreur, sans parler de toutes les solutions du problème. Bien que merci pour les astuces. Je les considérerai pour une expérience future;)
Ah, droite - tout va bien alors. Si c'était un livre C #, j'aurais été consterné :)
Je soupçonne que votre problème est que vous n'avez pas voir Tutoriel de surcharge de l'opérateur . < / p>
mise à jour: j'ai couru le test de Nunit à travers le débogueur et utilise effectivement la méthode des égaux et non l'opérateur ==. P>
Vous ne pouvez pas remplacer les opérateurs - vous ne pouvez que surcharge i> eux. Nunit presque certainement ne sera pas i> utiliser des opérateurs surchargés - c'est inutilement compliqué quand il peut simplement appeler égale à ...
J'ai trouvé que cela confondre que la mise en œuvre de l'interface Iequatable, qui a également une méthode , m'a posé avec le même problème que décrit ci-dessus. P> la seule raison J'ai choisi d'utiliser l'interface Iéquible au-dessus du remplacement de la méthode des égaux n'était pas de devoir faire la vérification de type. P> à la fin, je devais utiliser le code suivant P> public bool Equals(CustomTag other)
{
return (other.Name.Trim().ToLower() == Name.Trim().ToLower());
}
public override bool Equals(object o)
{
if (o is CustomTag)
{
return Equals(o as CustomTag);
}
return false;
}
Vous pouvez écrire des affirmations agnostiques-cadres à l'aide d'une bibliothèque appelée. Il a également une très belle syntaxe fluide qui peut être utilisée si vous aimez des interfaces courantes. J'ai eu un poteau de blog sur la même chose. p>
http: //nilehgule.blogspot. COM / 2010/11 / utilisation-devoir-assertion-bibliothèque-to-write.html p>
Avez-vous essayé avec une substitution publique Bool Equals ()?
@Samuel - Correct, mais vous auriez besoin de changer le modificateur et le type I.E. Public Bool Supprimer est égal à ()