我有以下(简化)函数,我希望使用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工具调用。
答案 0 :(得分:1)
我不是Documentum的专家,但我认为你需要一个更复杂的对象,你可以看看这个回购https://github.com/ValentinBragaru/dfc-mock
我认为你需要{p> IDfSessionMock。我希望它有所帮助。