2013-05-15 44 views
2

Classcast上嘲讽JAX-WS代理上嘲讽JAX-WS代理

Classcast例外,我尝试使用JaxWsPortProxyFactoryBean在Spring(3.2.2版本),但是当我尝试嘲笑端口在我单位失败测试。 classcast异常的原因是我需要将代理强制转换为BindingProvider。

我试着添加withSettings()。extraInterfaces,但我得到了同样的异常。 https://groups.google.com/forum/?fromgroups=#!topic/mockito/YM5EF0x90_4

有没有人有任何建议来解决我的屁股疼痛或以其他方式嘲弄港口?我添加JaxWsPortProxyFactoryBean的唯一原因是能够在不进行WS调用的情况下进行单元测试。

ApplicationContext的豆:

<bean id="port" class="org.mockito.Mockito" factory-method="mock" > 
    <constructor-arg index="0" value="name of the 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); 

单元测试:

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)); 
} 
} 

更新:

我不认为这个问题是不同版本的Bindingprovider的。 当我对代理bean进行以下更改时,它能够执行强制转换并执行ws调用。

<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> 

的JaxWsPortProxyFactoryBean确实实现了Bindingprovider接口,使得它能够施展代理到bindingprovider。但是当我嘲笑对象时,它不再是实现BindingProvider的类型。

+0

是对BindingProvider它实际上_is_相同BindingProvider是你的类加载器看到的吗?换句话说,您的JVM中是否有两个BidningProvider副本 –

回答

0

经过一番研究,我发现我的单元测试更像一个集成测试..

改变了测试以下,使其工作:

@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)); 
    }