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é?