2016-07-11 8 views
2

Ich versuche, Wiremock 2.1.6 von Scala zu verwenden. In den Mapping-Buildern hat sich jedoch etwas geändert, so dass scalac es nicht mehr überprüfen kann.Wiremock 2.x in Scala

Das erste Anstoßen Beispiel in der Dokumentation:

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

Ergebnisse in diesen Fehlern beim Kompilieren:

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(

Verfahren willReturn

in der RemoteMappingBuilder Schnittstelle definiert Es
public interface RemoteMappingBuilder<M extends RemoteMappingBuilder, S extends ScenarioMappingBuilder> { 
    ... 
    M willReturn(ResponseDefinitionBuilder responseDefBuilder); 
} 

scheint mir, dass Scala nicht glücklich über t ist Die generische Schnittstelle RemoteMappingBuilder wird ohne Typparameter in M extends RemoteMappingBuilder verwendet.

Irgendwelche Vorschläge, wie man das umgeht?

+0

Ich habe das gleiche Problem, haben Sie irgendwelche Problemumgehungen gefunden? Momentan verwende ich 2.0.8-beta als letzte funktionierende Version (mit 'MappingBuilder' anstelle von' RemoteMappingBuilder') – kgs

+0

Nein, habe nichts gefunden. Werde es mit der älteren Version versuchen. –

Antwort

2

Sie sollten RemoteMappingBuilder[_,_] wie diese Stimmen:

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

Leider dies jedes Mal, Aufruf von Funktionen von generischer RemoteMappingBuilder Schnittstelle benötigt wird, zum Beispiel:

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

Können Sie sagen, warum Scala nicht den Typ wie Java ableitet? –

+1

Soweit ich verstanden habe, ist die einzige implementierende Klasse '' MappingBuilder'' Paket privat und kann vom Compiler nicht gesehen werden. Es ist auch möglich, zu einem spezifischeren Interface '' ScenarioMappingBuilder'' zu casten. Beide Lösungen sind ziemlich hässlich - es gab eine Idee, die Wiremock-Betreuer mit diesen generischen Typen versuchen wollten, aber ich verstehe es nicht. –