我正在使用Retrofit并通过Dagger2注入RestAdapter
和WebService
类/接口
在测试中,我模仿我的网络服务类为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服务以及我可以在这里使用哪些替代方案?
答案 0 :(得分:0)
你不能要求RestAdapter
实现一个类,因为类是的实现。您必须在测试中使用构造函数单独实例化它,可能只是空构造函数。因此,您只需使用Dagger
创建自己的实例,而不是通过new MockWebService200()
注入它。不过,你也必须实现getServiceModel()
。