0

私は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などのメソッドを呼び出したりカバーしたりするにはどうすればよいですか?

4

2 に答える 2

0

それが役に立ったら、誰かがテスト不能にするのに非常に良い仕事をしたと思いますshowFollowersList。それは意図的でしたか?

もしそうなら、正解は実際にはテストコードのセットではないかもしれませんが、非常に低いカバレッジスコアと、クラスをよりテストしやすくするために変更するための推奨事項のリストです...

現時点でそれをテストする唯一の方法は、物事を設定し、それを突いて、何が起こるかを確認することです。そして、それはhandleEvent、オブジェクトに対して呼び出しを発生させることができ、クラスで特定のメソッドが使用可能である場合にのみ機能します:getListgetListenerCountなど。次に、次のようになります。

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場合は、単体テストのためだけにメソッドを追加して公開することはお勧めできません。

もう1つの問題はGUIです。ユニットテストにはGUIがありません。したがって、m_rightFrameおそらくnullになります(そうでない場合でも、基礎となるAWTクラスはnullになります)。

于 2013-02-25T10:31:14.147 に答える
0

これは「メソッド内のメソッド」ではなく、匿名クラスのメソッドです。

通常、SWTまたはSwingプログラミングでは、足場(ハンドラーなど)ではなく、多くのテストカバレッジを必要とするのは、コードの機能(ビジネス)の側面です。

ただし、これが必要な場合は、少なくとも2つのオプションがあります-

  1. ハンドラーに匿名の内部クラスを使用しないでください。同じパッケージで名前を付けてください。
  2. PowermockとJUnitのようなモックフレームワークを使用し、モックされたSWTイベントオブジェクトを渡してハンドラーを呼び出し、カバレッジを確保します。
于 2013-02-25T10:00:47.970 に答える