2

モック JAX-WS プロキシのクラスキャスト

Spring (3.2.2 リリース) で JaxWsPortProxyFactoryBean を使用しようとしましたが、単体テストでポートをモックしようとすると失敗します。クラスキャスト例外の理由は、プロキシを Bindingprovider にキャストする必要があるためです。

withSettings().extraInterfaces を追加しようとしましたが、同じ例外が発生します。 https://groups.google.com/forum/?fromgroups=#!topic/mockito/YM5EF0x90_4

お尻の痛みを解決したり、他の方法でポートを嘲笑したりするための提案はありますか? JaxWsPortProxyFactoryBean を追加した唯一の理由は、WS 呼び出しを行わずに単体テストを実行できるようにするためでした。

ApplicationContext-Bean:

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

ポートフォリオ:

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 を実装する型ではなくなります。

4

2 に答える 2

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));
    }
于 2013-05-15T13:40:33.973 に答える