2011-12-08 5 views
0

Hmm, j'ai un objet d'argent qui me permet d'ajouter d'autres objets d'argent dedans. J'ai essayé assertEquals() en Java pour tester si mon code si d'accord, mais il a échoué.assertEquals (obj, obj) renvoie un test échoué

Je suis très positif que mon code est correct (System.out.println renvoie la bonne réponse), je pense que je suis en train d'utiliser assertEquals de la mauvaise manière. Que dois-je faire exactement si je veux savoir si myObj1 == myObj2 pour les tests?

**in my test.java**  
assertEquals(new Money(money1.getCurrency(),new Value(22,70)),money1.add(money2)); 

**in my money class** 
public class Money { 
    Currency currency; 
    Value value; 

    //constructor for Money class 
    public Money(Currency currency, Value value) { 
     super(); 
     this.currency = currency; 
     this.value = value; 
    } 

    public Currency getCurrency() { 
     return currency; 
    } 

    public void setCurrency(Currency currency) { 
     this.currency = currency; 
    } 

    //must have same currency 
    public Money add(Money moneyToBeAdded){ 
     Money result = new Money(moneyToBeAdded.currency, new Value(0,0)); 
     Value totalInCents; 
     int tempCents; 
     int tempDollars; 

     if(compareCurrency(moneyToBeAdded)){ 
      totalInCents = new Value(0,moneyToBeAdded.value.toCents()+value.toCents()); 
      tempDollars = (totalInCents.toDollars().getDollar()); 
      tempCents = (totalInCents.toDollars().getCents()); 

      result = new Money(moneyToBeAdded.currency, new Value(tempDollars,tempCents)); 
      System.out.println(result.value.getDollar()+"."+result.value.getCents()); 
     } 
     return result; 
    } 

    private boolean compareCurrency(Money money){ 
     return (money.currency.equals(currency))? true : false; 
    } 
} 
+0

Où est la méthode 'equals' de votre classe d'argent? – Paul

+0

De même, dans 'compareCurrency', vous avez effectivement écrit' if (true) return true; else if (false) renvoie false; 'Tout ce dont vous avez besoin est:' return money.currency.equals (currency); ' – Paul

+0

woops! Cela doit être le chaînon manquant .. T__T –

Répondre

8

Vous n'avez pas modifié la méthode equals() de la classe d'objets dans votre classe d'argent. Si c'est le cas, les objets sont comparés par leurs références, qui sont différentes dans ce cas. Here vous pouvez trouver des règles pour la mise en œuvre equals.

1

Vous pouvez écrire vos tests pour comparer les champs:

Money m1 = new Money(money1.getCurrency(),new Value(22,70)); 
Money m2 = new Money(money1.getCurrency(),new Value(22,70)).add(money2); 

assertEquals("currencies differ", m1.getCurrency(), m2.getCurrency()); 
assertEquals("values differ", m1.getValue(), m2.getValue());