8

我怎样才能模拟演员操作。我对依赖对象进行了强制转换操作,它将强制转换为另一个依赖对象,例如

SqlMapClient sqlMapClient;
SqlMapClientImpl sqlMapClientImpl = (SqlMapClientImpl) sqlMapClient 

我在嘲笑依赖的 clesses ieSqlMapClientSqlMapClientImpl. 但是我需要知道如何使用 EasyMock 来模拟演员阵容。

任何帮助,将不胜感激。

4

2 回答 2

4

您不能模拟强制转换,因为强制转换不会导致对对象的方法调用。

相反,使用 EasyMock 类扩展来模拟SqlMapClientImpl类,并将对该模拟的引用传递给接受 aSqlMapClient到 a的类SqlMapClientImpl

但是请注意,在您的代码中进行类似的向下转换是一种代码异味。如果您的生产代码正在将接口向下转换为实现类,那么您将失去使用接口的所有灵活性。它实际上可能比根本不使用接口更糟糕,因为看起来你的类依赖于接口,因此可以与任何实现一起使用,但实际上你的类依赖于一个特定的实现。

于 2010-09-13T13:57:35.400 回答
0

我们无法转换的原因是 Easy Mock 将动态创建一个将实现 SqlMapClient 类的类,并且它没有任何关于实现类(SqlMapClientImpl)的信息,所以一个便宜的技巧可以是创建一个实现 SqlMapClient 接口的类和扩展 SqlMapClientImpl 类,这可能有效。

于 2016-09-26T07:11:54.420 回答