2014-01-06 4 views
0

Я пытаюсь реализовать тест JUnit для метода, который создает и возвращает объект Cursor объекта Image при перемещении колеса мыши. Идея заключается в том, чтобы загрузить другой курсор каждый раз, когда перемещение колеса мыши:Сравните равенство двух объектов курсора

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 только в том случае, если ссылка является одинаковой.

Поэтому вы должны реализовать свой собственный метод equals, используя любую информацию об объекте, которую вы решите, «равно» для вашего кода.

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 

} 
Смежные вопросы