2

Scala の Wiremock 2.1.6 を使用しようとしています。ただし、マッピングビルダーの型が変更されたため、scalac は型チェックできなくなりました。

ドキュメントの最初のスタブの例:

stubFor(get(urlEqualTo("/some/thing"))
        .willReturn(aResponse()
            .withHeader("Content-Type", "text/plain")
            .withBody("Hello world!")));

コンパイル時に次のエラーが発生します。

type mismatch;
    found   : ?0(in value <local TestSpec>) where type ?0(in value <local TestSpec>) <: AnyRef
    required: com.github.tomakehurst.wiremock.client.RemoteMappingBuilder[_ <: AnyRef, _ <: com.github.tomakehurst.wiremock.client.ScenarioMappingBuilder]
    get(urlEqualTo("some/thing")).willReturn(

メソッドwillReturnRemoteMappingBuilderインターフェースで定義されています

public interface RemoteMappingBuilder<M extends RemoteMappingBuilder, S extends ScenarioMappingBuilder> {
    ...
    M willReturn(ResponseDefinitionBuilder responseDefBuilder);
}

RemoteMappingBuilderScala は、型パラメータなしでジェネリック インターフェイスが使用されていることに満足していないように思えますM extends RemoteMappingBuilder

これを回避する方法について何か提案はありますか?

4

2 に答える 2

2

RemoteMappingBuilder[_,_]次のようにキャストする必要があります。

stubFor(get(urlEqualTo("/some/thing"))
    .willReturn(aResponse()
        .withHeader("Content-Type", "text/plain")
        .withBody("Hello world!")).asInstanceOf[RemoteMappingBuilder[_,_]])

RemoteMappingBuilder残念ながら、これはジェネリックインターフェイスの関数を呼び出すたびに必要になります。

stubFor(get(urlEqualTo("/some/thing"))
    .withQueryParam("some_parameter", equalTo(paramValue)).asInstanceOf[RemoteMappingBuilder[_,_]]
    .willReturn(aResponse()
        .withHeader("Content-Type", "text/plain")
        .withBody("Hello world!")).asInstanceOf[RemoteMappingBuilder[_,_]])
于 2016-08-05T17:49:57.643 に答える
2

これは最新のリリースで修正されました: https://github.com/tomakehurst/wiremock/pull/482

于 2016-08-23T07:10:29.260 に答える