public class Dollar { private int amount; public Dollar(int amount) { this.amount = amount; } public Dollar times(int multiplier) { return new Dollar(amount * multiplier); } public bool equals(Object theObject) { Dollar dollar = (Dollar) theObject; return amount == dollar.amount; } }
5 Réponses :
Le assert.Areequals code> utilisera la méthode
Equals code> pour tester l'égalité. Au lieu de remplacer
objet.equals code> le type code> dollar code> définit simplement un nouveau
égale code> méthode qui ne participe pas à l'égalité des objets .NET. Il n'est donc pas utilisé et le test utilise l'égalité de référence qui échoue. Pour résoudre ce problème, vous devez remplacer la méthode
objet.equales code>
Il y a quelques choses: p>
égale code>, au lieu de remplacer la méthode de la classe de base égale code>. Basculer pour remplacer et Nunit appellera votre méthode. li>
- Nunit imprime l'objet à l'aide de son
TOSTRING code> et la mise en œuvre par défaut de Tostring consiste simplement à imprimer le nom de la classe. Remplacer Tostring code> Pour imprimer le montant et le message d'affirmation fera beaucoup plus de sens. Li>
ol>
Nunit affiche la représentation des chaînes d'objets. Afin d'avoir une sortie pratique, vous devriez remplacer La sortie sera la suivante: p > tostring code> méthode de
dollar code> Classe:
public override int GetHashCode()
{
return amount.GetHashCode();
}
De plus, si vous prévoyez de ne pas dériver de la classe code> dollar code>, envisagez de le faire scellé code>. Si vous ne le faites pas
scellé code>, envisagez de dire
si (gettype ()! = Autre.getType ()) Renvoyer false; code> à l'intérieur du
est égal à code> > méthode. Sinon, vous pouvez obtenir un mauvais résultat si
autre code> est un
dollar code> d'un type plus dérivé, comme un
DescriptionDollar code>.
Qu'est-ce que vous affirmez qu'il y a que Vous n'utilisez pas le remplacement nouveau dollar (10) code> est le même objet que celui
cinq.time (2) code> retourne, ce qui n'est pas vrai. < p> Si vous souhaitez affirmer de cette façon, vous devez surcharger la méthode des égaux dans votre classe dollar comme ceci: p>
code> mot-clé dans votre
est égal à code> méthode. p> p>
La meilleure solution a déjà été donnée par quelques personnes, mais une alternative susceptible de fonctionner dans d'autres situations. Vous auriez besoin d'ajouter un getter pour le champ code> code> comme: puis lorsque vous faites le test de l'unité, il ressemblerait à: P > Assert.AreEqual(10, five.times(2).Amount);
Mis à part: pourquoi ne mettez-vous pas en œuvre surcharge de l'opérateur?
On dirait que cela pourrait être une question de la version de l'Assemblée; Est-il possible que vous ayez deux versions de l'Assemblée qui implémentent
tddbooks.dollar code> chargé?