1

我正在使用 JMockito 和 sling commons testing 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() 方法时会发生什么的预期。我怀疑您可能已经模拟了 ParameterMap 对象,但可能没有设置对该 ParameterMap 的期望,以便在调用它的 keySet 方法时它会知道要做什么/返回。同样,我只是在猜测,但我希望这会有所帮助。

于 2012-10-30T15:40:14.590 回答
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 回答