2016-07-11 4 views
2

Я пытаюсь использовать Wiremock 2.1.6 от Scala. Тем не менее, что-то изменилось в типах построителей сопоставления, так что scalac не может его проверить.Wiremock 2.x в Scala

Первый пример раскорчевка в документации:

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(

Метод willReturn определен в интерфейсе RemoteMappingBuilder

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

It мне кажется, что Скала не довольна он общий интерфейс RemoteMappingBuilder используется без параметров типа в M extends RemoteMappingBuilder.

Любые предложения о том, как обойти это?

+0

У меня такая же проблема, вы нашли какие-нибудь обходные пути? На данный момент я использую 2.0.8-бета в качестве последней рабочей версии (с 'MappingBuilder' вместо' RemoteMappingBuilder') – kgs

+0

Нет, ничего не нашли. Попробуй с более старой версией. –

ответ

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[_,_]]) 
+0

Можете ли вы рассказать, почему Scala не выводит такой тип, как Java? –

+1

Насколько я понял, единственный класс реализации «MappingBuilder» является закрытым пакетом и не может быть замечен компилятором. Можно также передать более конкретный интерфейс '' ScenarioMappingBuilder''. Оба решения довольно уродливые - некоторые разработчики Wiremock пытались достичь с этими родовыми типами, но я этого не понимаю. –

Смежные вопросы