我正在研究Junit测试用例,评分方案基于代码的覆盖范围。 我在方法中遇到了一些@override方法的问题,因为看起来我无法调用该方法。 就像下面的例子一样。
public void showFollowersList(PagableResponseList<User> followers) {
m_itemList.addListener(SWT.Resize, new Listener() {
@Override
public void handleEvent(Event arg0) {
m_itemList.setLayoutData(new RowData(m_itemList.getBounds().width,
m_itemList.getBounds().height));
m_rightFrame.layout();
m_rightFrame.pack();
}
});
}
addMouseTrackListener(new MouseTrackListener() {
@Override
public void mouseHover(MouseEvent arg0) {
}
@Override
public void mouseExit(MouseEvent arg0) {
Rectangle rect = HoverClickableComposite.this.getClientArea();
if (!m_clicked && !rect.contains(arg0.x, arg0.y)) {
setBackground(m_origColor);
}
}
如何调用或覆盖handleEvent,mouseExit和mouseHover等方法?
答案 0 :(得分:0)
它不是“方法内部”的方法,它是匿名类的方法。
通常,使用SWT或Swing编程,代码的功能(业务)方面需要大量测试覆盖,而不是脚手架(处理程序等)
但是,如果这是必需的,则至少有两个选项 -
答案 1 :(得分:0)
如果它有所帮助,我认为有人在使showFollowersList
无法测试时做得非常好。这是故意的吗?
如果是这样,正确的答案实际上可能不是一组测试代码,而是一个非常低的覆盖率分数和一个更改类的建议列表,使其更易于测试......
目前测试它的唯一方法是设置,戳它,检查发生了什么。
这只有在您可以对您的对象进行handleEvent
调用时才有效,并且该类可以使用某些方法:getList
,getListenerCount
等。然后,类似于:
testObject.showFollowersList(followers);
// All that method does is add listener. So check that listener got added
assertEquals(1, testObject.getList().getListenerCount());
// Now check that inner handlers behave correctly
testObject.getList().fireEvent();
// This should have created a new RowData in the list
assertNotNull(testObject.getList().getLayoutData());
但是如果你不那些方法可用,那么添加它们并仅仅为了单元测试而公开List
绝对不是一个好主意。
另一个问题是GUI。您的单元测试没有GUI。所以,你的m_rightFrame
可能是null(即使它不是,底层的AWT类也是如此)。