比较两个Cursor对象的相等性

时间:2014-01-06 19:14:39

标签: java junit

我正在尝试为移动鼠标滚轮时从Cursor对象创建并返回Image对象的方法实现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对象应该是相同的。

知道为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

java.awt.Cursor没有实现equals()所以它委托给Object equals,如果引用相同,它只会返回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

}