1

JMockitoとスリングコモンズテストAPIを使用してCQ5アプリケーションのJUnitテストケースを作成しています。リクエストパラメータをモックすることができます。私の実際のJavaメソッドには、requestParamMapObj.keySet()。iterator()などのリクエストパラメーターマップを反復処理し、いくつかのノードプロパティを取得するロジックがありますが、ユニットテストケースを実行すると、前述のkeySetイテレーターが実行されず、ターゲット呼び出しがスローされませんrequestParamMapObjにもデータがあります。

コンテンツ管理アプリケーション用のJUnitテストケースを作成するのはこれが初めてです。

どんな助けでも非常に高く評価されます。

これが私のテストメソッドコードです:

this.context.checking(new Expectations() {
    { 
        this.one(mockRequest).getRequestParameterMap();
        this.will(returnValue(paramsMap)); 
    } 
}); 

そして、JUnitが以下のコードに到達すると、ターゲット呼び出し例外をスローします。

private Map<String, String> getAllAnswers(final RequestParameterMap reqParamMap) { 
    final Iterator<String> keySetIterator1 = reqParamMap.keySet().iterator();
}
4

2 に答える 2

0

はいショーン。そうです、keySet() メソッドの期待値を設定すると、それが呼び出されます。this.allowing(paramsMap).keySet(); しかし、ここでの私の質問は、すべての行動に対して期待を設定する必要があるということです. これは意味がありますか、つまり、単体テスト コードは実際の Java コード以上のものになっているということです :) . テスト コードを削減できる代替ソリューションはありますか。

            this.allowing(resource).adaptTo(Node.class);
            this.will(returnValue(node));

            this.allowing(node).hasNode("voting");
            this.will(returnValue(true));

            allowing(repository).loginAdministrative(null);
            will(returnValue(session));

            allowing(session).getWorkspace();
            will(returnValue(workspace));

            allowing(workspace).getQueryManager();
            will(returnValue(queryManager));
于 2012-10-31T13:40:22.683 に答える
0

完全なコードを表示することは役に立ちますが、リストした内容とこれまでのコメントに基づいて、keySet() メソッドが呼び出されたときに何が起こるかについての期待を設定する必要があるように思えます。おそらくあなたは ParameterMap オブジェクトをモックアウトしていると思いますが、おそらくその ParameterMap に期待を設定していないので、その keySet メソッドが呼び出されたときに何をすべきか/何を返すかがわかります。繰り返しますが、私は推測にすぎませんが、これが役立つことを願っています。

于 2012-10-30T15:40:14.590 に答える