java - Classcast exception on mocking JAX-WS proxy -
classcast on mocking jax-ws proxy
i try use jaxwsportproxyfactorybean in spring (3.2.2 release), fails when try mock port in unit test. reason classcast exception need cast proxy bindingprovider.
i tried add withsettings().extrainterfaces, same exception. https://groups.google.com/forum/?fromgroups=#!topic/mockito/ym5ef0x90_4
has suggestions resolve pain in ass or doing mocking of port in other way? reason added jaxwsportproxyfactorybean able unit test without doing ws call.
applicationcontext-beans:
<bean id="port" class="org.mockito.mockito" factory-method="mock" > <constructor-arg index="0" value="name of porttype class" /> </bean> wshelper:
import com.sun.xml.ws.client.bindingproviderproperties; import javax.xml.ws.bindingprovider; @resource private theporttypeclass port; … bindingprovider bp = (bindingprovider) port; ... portfolioimpl:
request request= requesthelper.getrequest(vo); theporttypeclass port =wshelper.getport(); response response = null; response = port.wsmethod(request); unit test:
import static org.mockito.mockito.*; import static org.junit.assert.*; @runwith(springjunit4classrunner.class) @contextconfiguration(locations = {"/applicationcontext.xml"}) public class portfolietest { @resource private theporttypeclass port; @resource private wshelper wshelper; @autowired portfolio portfolio; @before public void setup(){ response response = new response(); … port=mock(theporttypeclass.class, withsettings().extrainterfaces(bindingprovider.class)); when(port.method(any(request.class))).thenreturn(response); } @test public void update() { assertequals(true, portfolio.update(someparameters)); } } update:
i don't think issue different versions of bindingprovider. when following change proxy bean it's able cast , ws call.
<bean id="port" class="org.springframework.remoting.jaxws.jaxwsportproxyfactorybean"> <property name="serviceinterface" value="theporttypeclass" /> <property name="namespaceuri" value="nm" /> <property name="servicename" value="theservicename" /> <property name="endpointaddress" value="theurl" /> <property name="wsdldocumenturl" value="theurl" /> </bean> the jaxwsportproxyfactorybean implements bindingprovider interface it's able cast proxy bindingprovider. when mock object no longer of type implements bindingprovider.
after research found out unit test looked more integration test..
changed test following make work:
@runwith(mockitojunitrunner.class) public class portfolietest { @injectmocks portfolio portfolio = new portfolioimpl(); @mock private theporttype port; @mock private wshelper wshelper = new wshelper(); @before public void setup() throws feil, malformedurlexception, documentexception { response response = new response(); … when(wshelper.geport(someparameters).thenreturn(port); when(port.wsmethod(any(request.class))).thenreturn(response); } @test public void update() throws malformedurlexception, documentexception { assertequals(true, portfolio.update(someparameters)); }
Comments
Post a Comment