2016-04-30 79 views
0

首先,我是Java新手,所以希望這不是非常簡單的事情,但我正在嘗試做一些單元測試,並且我沒有在Eclipse中獲得舊的綠燈。對我的問題:Objects.equals for jUnit測試

所以,我有兩個對象,都是類分數和我只是試圖確保我的方法(multiplyThem)是......呃......正常運作。

代碼(編輯來展示一下我現在有):

private Fraction newFraction, otherFraction, thirdFraction; 

@Before 
public void setUp(){ 
    newFraction = new Fraction(2, 3); 
    otherFraction = new Fraction(1, 5); 
    thirdFraction = new Fraction(2, 15); 
} 

@Test 
public void testMultiplyEm() { 
    System.out.println(newFraction.multiplyEm(otherFraction)); 
    System.out.println(thirdFraction); 
    assertEquals("Fractions don't equal", newFraction.multiplyEm(otherFraction), thirdFraction); 
} 

在該方法中multiplyEm,返回類型是一小部分,它調用另一個函數調用簡化之前乘以2個分子和分母2。然後它返回簡化的分數。

我使用了兩個單獨的System.out.println,並得到了完全相同的東西印在屏幕上。我知道這並不總是意味着他們是相同的,但也許Objects.equals不是我應該在這裏使用。這些對象只是兩個整數:Fraction x = new Fraction(int y, int z)

我不知道爲什麼測試失敗。有人有主意嗎?將不勝感激的方式來正確編寫一個單元測試!

Fraction類方法multiplyEm:

public Fraction multiplyEm(Fraction otherFraction){ 
     int newNumerator = this.numerator * otherFraction.numerator; 
     int newDenominator = this.denominator * otherFraction.denominator; 
     Fraction newFraction = new Fraction(newNumerator, newDenominator); 
     return newFraction; 
    } 
+0

打印的內容是無關緊要的。 Objects.equals()使用fraction.equals(fraction2)。所以如果你沒有重寫equals(Object),那麼一個分數只等於它自己。 –

+0

你是否爲Fraction類實現了equals和hashCode方法? Assert.assertEquals和Objects.assertEquals都委託給Fraction.equals來檢查相等性 –

+0

我認爲你問我是否在Fraction類(或.hashCode)中的任何位置使用了Fraction.equals?如果這就是你要求的,不,我沒有。我想我也應該從課堂上發佈我的代碼。也許這就是我真正在搞的東西 – drawnitsud

回答

3

您正在運行到對象的身份和平等之間的差異。 equals方法根據實現檢查身份或相等性。 ==操作員總是檢查對象的身份。

Objects.equals方法檢查空引用,然後將檢查委​​託給第一個參數的equals方法。

從Object類繼承的equals方法檢查對象的標識。對象引用是相同的。 Fraction類應該重寫equals實現。正確執行equals方法有一些rules。有一個equals和hashCode方法的合約,需要使Java Collections正確工作。

包含在JUnit框架中的方法是assertEquals方法。這是通常用於在單元測試中測試相等性的方法。

+0

啊,我終於明白你在暗示什麼了。我需要自己重寫equals()方法!我做到了,它工作。謝謝!另外,我真的很喜歡[這個頁面](http://www.geeksforgeeks.org/overriding-equals-method-in-java/)進行簡單的探索。 – drawnitsud