Я использую Retrofit и внедряю классы/интерфейсы RestAdapter
и WebService
через Dagger2.
В тестах я издеваюсь над своим классом веб-сервиса как MockWebService200 implements WebService
, и я получаю это исключение от Retrofit
java.lang.IllegalArgumentException: Only interface endpoint definitions are supported.
at retrofit.Utils.validateServiceClass(Utils.java:102)
at retrofit.RestAdapter.create(RestAdapter.java:193)
Вот класс интерфейса для WebService
public interface WebService {
@FormUrlEncoded
@POST("/loginByEmail")
void loginByEmail (@Field("emailaddress") String email,
@Field("password") String password,
@Field("checksum") String checksum,
Callback<ServiceModel<User>> callback);
}
А вот и мой MockWebService200
класс
public class MockWebService200 implements WebService {
@Override
public void loginByEmail (@Field("emailaddress") String email,
@Field("password") String password,
@Field("checksum") String checksum,
Callback<ServiceModel<User>> callback) {
ServiceModel<User> userModel = getServiceModel( getUser() );
callback.success( userModel, null );
}
@Override public <T> ServiceModel<T> getServiceModel (T model) {
// Skipped
}
@Override public User getUser () {
// Skipped
}
}
getUser()
и getServiceModel()
здесь пропущены.
Вот код для @module
, который предоставляет зависимости
@Module
@Singleton
public class ApiModule {
@Provides
@Singleton RestAdapter provideRestAdapter () {
RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint( "some_url" )
.setClient( /*OkHttpClient*/ );
return builder.build();
}
@Provides
@Singleton WebService provideWebService (RestAdapter restAdapter) {
return restAdapter.create( MockWebService200.class );
}
}
Вопросы:
1- Как это исправить?
2- Правилен ли мой подход к имитированию веб-сервисов с помощью полиморфизма и какие альтернативы я могу здесь использовать?
RestAdapter
для создания экземпляра своего издевательского класса? Мокабельный класс не нужно создавать путем модификации, поскольку вы предоставляете реализацию вместо модификации. - person AlexWalterbos   schedule 27.08.2015RestAdapter
и предоставляюMockWebService200.class
в своемbuilder().create()
какRestAdapter.builder().create(MockWebService200.class)
. Я также добавлю код провайдера в свой вопрос. - person Hassan Jawed   schedule 27.08.2015