如何模拟演员操作? 我对依赖对象进行了强制转换操作,它将转换为另一个依赖对象,如
SqlMapClient sqlMapClient;
SqlMapClientImpl sqlMapClientImpl = (SqlMapClientImpl) sqlMapClient
我正在嘲笑两个依赖的咒语,即SqlMapClient
和SqlMapClientImpl
。但我需要知道如何使用EasyMock进行模拟。
任何帮助都将不胜感激。
答案 0 :(得分:4)
你不能模拟强制转换,因为强制转换不会导致对象的方法调用。
相反,使用EasyMock类扩展模拟SqlMapClientImpl
类,并将对该模拟的引用传递给接受SqlMapClient
到SqlMapClientImpl
但是,请注意,在代码中进行向下转换是一种代码味道。如果您的生产代码正在执行向实现类的接口的向下转换,那么您将失去使用接口的所有灵活性。它实际上可能比不使用接口更糟糕,因为它看起来像你的类依赖于接口,因此可以用于任何实现,但实际上你的类依赖于一个特定的实现。
答案 1 :(得分:0)
我们无法强制转换的原因是Easy Mock将动态创建一个类,它将实现SqlMapClient类,它没有任何有关Implementation类(SqlMapClientImpl)的信息,所以一个廉价的技巧可以创建一个实现SqlMapClient接口并扩展可能有效的SqlMapClientImpl类。