Java 我怎样才能轻松完成演员阵容?

Java 我怎样才能轻松完成演员阵容?,java,easymock,Java,Easymock,我怎样才能模仿演员表演呢。 我在一个依赖对象上有一个强制转换操作,它将强制转换到另一个依赖对象,如 SqlMapClient sqlMapClient; SqlMapClientImpl sqlMapClientImpl = (SqlMapClientImpl) sqlMapClient 我正在模拟依赖的cless,即SqlMapClient和SqlMapClientImpl。但是我需要知道如何使用EasyMock模拟cast 任何帮助都将不胜感激。您不能模拟强制转换,因为强制转换不会导致对

我怎样才能模仿演员表演呢。 我在一个依赖对象上有一个强制转换操作,它将强制转换到另一个依赖对象,如

SqlMapClient sqlMapClient;
SqlMapClientImpl sqlMapClientImpl = (SqlMapClientImpl) sqlMapClient 
我正在模拟依赖的cless,即
SqlMapClient
SqlMapClientImpl
。但是我需要知道如何使用EasyMock模拟cast


任何帮助都将不胜感激。

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

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


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

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

如果SqlMapClientImpl是最终类,这将不起作用……因为你不能模拟最终类。@JamesD OP已经说他们在模拟
SqlMapClientImpl
。如果您需要对最后一个类执行类似的操作,您可以尝试传入一个真正的
sqlmapclientmpl
,假设它构造起来很便宜。更大的问题是为什么要模拟强制转换操作。你想测试的更大的东西是什么?太好了。如果您觉得需要从接口向下转换到具体的实现中,这意味着您当前的抽象级别存在漏洞,这是应该首先修改的。