1

私はDAOにいくつかの変更を加えています。変更には、いくつかのコードをリファクタリングして、いくつかのメソッドが.getResultsList()複数回呼び出されないようにすることが含まれていました。代わりに、結果は にキャッシュされ、List後続のすべてのコードはそのリストで動作し、データベースに 1 回アクセスするだけでコードがより効率的に実行されます。

今後このようなことが起こらないように、変更したメソッドの jUnit テストを作成するように依頼されました。メソッド内のローカル変数に、mockito を使用して関数が呼び出された回数を検証することは可能ですか?

verifyモックされたオブジェクトで行われた呼び出しの数を検証するために使用することについて、いくつかの質問/フォーラムの投稿を見てきました。しかし、このオブジェクトはメソッド内で作成されているため、渡されないため、実際にはこのオブジェクトをモックすることはできません。

基本的 -

myDaoEntityManagerにはというクラス変数がemあり、関数は変数em.createNamedQuery()に格納されます。これは、.getResultsList が複数回呼び出されていたものです。TypedQueryqq

私のjUnitテストでは、モックされたDaoで呼び出しているメソッド内で何が起こっているかを聞いてq.getResultsList、メソッドの実行中に一度だけ呼び出されることを確認することは可能ですか?

アップデート

myDao私のテストクラスでは、次の@Autowiredようにアノテーションを使用して構成されています。

@Autowired
MyDao myDao;

次のように applicationContext.xml で定義されます。

<bean id="myDao" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="com.mypackage.myDao"/>
</bean>

myDao.myMethod(myVar);呼び出しているメソッドはその DAO の内部にあるため、 Insideを呼び出すのmyMethodは、リッスンしたい q 変数です。ローカル変数です。

4

1 に答える 1

2

myDao をモックしている場合、myDao 内のコードを検証することはできません。

これをテストするには、myDao クラスのテストが必要です。その単体テストでは、モックEntityManagerして、モックされcreateNamedQueryたクエリを返すことができます。次に、mockito のverifyandを使用して、モックされたクエリで一度だけ呼び出されたtimes(1)ことを確認できます。getResultsList()

于 2013-04-10T19:30:19.567 に答える