我怎样才能模拟演员操作。我对依赖对象进行了强制转换操作,它将强制转换为另一个依赖对象,例如
SqlMapClient sqlMapClient;
SqlMapClientImpl sqlMapClientImpl = (SqlMapClientImpl) sqlMapClient
我在嘲笑依赖的 clesses ieSqlMapClient
和SqlMapClientImpl
. 但是我需要知道如何使用 EasyMock 来模拟演员阵容。
任何帮助,将不胜感激。
您不能模拟强制转换,因为强制转换不会导致对对象的方法调用。
相反,使用 EasyMock 类扩展来模拟SqlMapClientImpl
类,并将对该模拟的引用传递给接受 aSqlMapClient
到 a的类SqlMapClientImpl
但是请注意,在您的代码中进行类似的向下转换是一种代码异味。如果您的生产代码正在将接口向下转换为实现类,那么您将失去使用接口的所有灵活性。它实际上可能比根本不使用接口更糟糕,因为看起来你的类依赖于接口,因此可以与任何实现一起使用,但实际上你的类依赖于一个特定的实现。
我们无法转换的原因是 Easy Mock 将动态创建一个将实现 SqlMapClient 类的类,并且它没有任何关于实现类(SqlMapClientImpl)的信息,所以一个便宜的技巧可以是创建一个实现 SqlMapClient 接口的类和扩展 SqlMapClientImpl 类,这可能有效。