【发布时间】:2015-08-27 13:50:51
【问题描述】:
我正在使用 Retrofit 并通过 Dagger2 注入 RestAdapter 和 WebService 类/接口
在测试中,我将我的 Web 服务类模拟为 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- 我通过多态性模拟 Web 服务的方法是否正确?我可以在这里使用哪些替代方法?
【问题讨论】:
-
您是否使用
RestAdapter来实例化您的模拟类?模拟类不需要通过改造来实例化,因为您提供实现而不是改造。 -
是的,我正在使用
RestAdapter并在其builder().create()中提供MockWebService200.class作为RestAdapter.builder().create(MockWebService200.class)我将在我的问题中添加提供程序代码
标签: android unit-testing retrofit dagger-2