模拟Documentum IDfSession使用Mockito

时间:2014-08-20 15:59:41

标签: java unit-testing mockito documentum

我有以下(简化)函数,我希望使用JUnit检查:

protected IDfCollection getCollection(IDfSession session) throws DfException{
  IDfQuery dfcQuery = new DfQuery();
  dfcQuery.setDQL(MY_DQL);
  return dfcQuery.execute(session, IDfQuery.READ_QUERY);
}

我已经使用真正的IDfSession成功测试了它,但我希望在不连接到存储库的情况下进行测试。所以我尝试使用以下方法模拟空IDfSession:

IDfSession mockedSession = Mockito.mock(IDfSession.class);

但我得到了NullPointerException:

Caused by: java.lang.NullPointerException
at java.util.StringTokenizer.<init>(StringTokenizer.java:182)
at java.util.StringTokenizer.<init>(StringTokenizer.java:204)
at com.documentum.fc.internal.util.SoftwareVersion.<init>(SoftwareVersion.java:53)
at com.documentum.fc.client.DfQuery.runQuery(DfQuery.java:136)
at com.documentum.fc.client.DfQuery.execute(DfQuery.java:208)

不知道究竟出了什么问题(模拟对象的哪个函数返回了null,这是不期望的)我创建了一个实现IDfSession接口的简单类,并使用代码覆盖工具来检查调用了哪个函数。我希望稍后使用mockito来模拟函数的行为。我似乎是getServerVersion因此我将返回的null更改为实际值"6.5.0.355 SP3P0600 Linux.Oracle"。接下来调用的函数是getBatchManager所以我也在这里模拟了返回的对象。但现在我明白了:

Caused by: java.lang.ClassCastException: com.example.model.mock.IDfSessionMocked cannot be cast to com.documentum.fc.client.impl.session.ISession

我试图在IDfSessionMocked类中实现ISession接口,但是它没有编译,例如因为其中一个使用的类型(即com.documentum.fc.client.impl.session.ISessionListener)不可见。

此处:http://www.informedconsulting.nl/blog/?p=187我发现了如何使用powerMock进行操作的信息。另一个区别是对象是直接从不使用IDfQuery的会话中获取的。

我该怎么办?

评论后更新

getBatchManager函数被模拟,现在它返回匿名内部类对象,所有返回值都设置为false或0,具体取决于预期的返回类型。函数isFlushBatchOnQuery已根据coverage工具调用。

1 个答案:

答案 0 :(得分:1)

我不是Documentum的专家,但我认为你需要一个更复杂的对象,你可以看看这个回购https://github.com/ValentinBragaru/dfc-mock

我认为你需要{p> IDfSessionMock

我希望它有所帮助。