4

CDI でどのようにテストを行っているのか疑問に思っています。注入中のクラスのモック。

クラスがある場合:

@Named
@RequestScoped
public class ItemProcessor {

  @Inject
  private ItemDao itemDao;


  public void execute() {


    List<Item> items = itemDao.fetchItems();
    for (Item item : items) {
        System.out.println("Found item " + item);
    }
  }
}

My ItemProcessor をテストしたいときに、テスト中に ItemDao クラスをモックしたい場合はどうすればよいですか?

4

2 に答える 2

4

フレームワークは、mockito のように、フィールド インジェクションを使用している場合でも依存関係をモックに設定できます: http://docs.mockito.googlecode.com/hg/latest/org/mockito/InjectMocks.html

ただし、一般的には、この正確な理由から、コンストラクター注入が推奨されます。それは、テスト容易性です。

于 2013-05-24T08:40:56.717 に答える
2

たとえば、CDI「代替」を使用できます。

@Alternative
public class TestCoderImpl implements Coder { ... }

現在、この Bean は、beans.xml で代替として宣言されている場合にのみ使用されます。

<alternatives>
    <class>package.TestCoderImpl</class>
</alternatives>

詳細情報.

于 2013-05-24T08:45:52.687 に答える