2014-01-06 122 views
0

我正在嘗試爲移動鼠標滾輪時創建並返回Image對象的Cursor對象的方法實施JUnit測試。我們的想法是,每次加載不同的光標移動鼠標滾輪:比較兩個遊標對象的相等性

public void testMouseWheelMoved() { 

    MouseWheelEvent e = new MouseWheelEvent(aJPanel, 0, 0, 0, 0, 0, 0, true, 0, 0, 0); 

    for (String iconName : myListenerClass.getIconNames()) { 

     myListenerClass.mouseWheelMoved(e); 
     Cursor currentViewCursor = aJPanel.getCursor(); 

     assertEquals(currentViewCursor, myListenerClass.getCursorForIcon(iconName)); 
    } 
} 

getCursorForIcon返回Cursor對象。 myListenerClass是實施MouseWheelListener的類的一個實例。 aJPanel是延伸JPanel的類的一個實例。

public void mouseWheelMoved(MouseWheelEvent e) { 

    // ... 

    String iconName = this.iconNames.get(0); // returns icon name at index 0 
    this.view.setCursor(this.getCursorForIcon(iconName)); 

} 

this.view是從上方aJPanel

不幸的是,這個測試(assertEquals)總是失敗,即使兩個對比Cursor對象應該是相同的。

任何想法,爲什麼這不起作用?

+0

哪個測試失敗? –

回答

2

java.awt.Cursor沒有執行equals()所以它委託給Object等於它將只返回true,如果引用是相同的。

因此,您必須使用您決定對代碼「相等」的任何對象信息來實現您自己的等號方法。

Cursor currentViewCursor = aJPanel.getCursor(); 

assertCursorsEquals(currentViewCursor, myListenerClass.getCursorForIcon(iconName)); 

} 

private void assertCursorsEquals(Cursor a, Cursor b){ 
    assertEquals(a.getType(), b.getType()); 
    ...//other checks you care about 

}