我已经建立了一个非常简单的项目来测试Robolectric +数据绑定(bind)+ Retrolambda的集成。当我运行测试服时,会收到以下消息:
Error:(30, 30) Gradle: error: cannot access AndroidHttpClient
class file for android.net.http.AndroidHttpClient not found
这很奇怪,因为我在任何地方都不使用AndroidHttpClient。
该错误在“ Activity ”行上发生:
@Before
public void setup() {
activity = Robolectric.setupActivity(MainActivity.class); // Error on this line
textView = (TextView) shadowOf(activity).findViewById(R.id.textView);
button = (Button) activity.findViewById(R.id.button);
editText = (EditText) activity.findViewById(R.id.editText);
}
该程序从不使用AndroidHttpClient。实际上,这是整个程序:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setUser(new User());
binding.button.setOnClickListener((v) -> {
binding.textView.setText(String.format("Hello, %s!", binding.editText.getText()));
binding.editText.setText("");
});
}
关于出什么问题的想法?
最佳答案
AndroidHttpClient
已从v23的构建工具中的SDK中删除。
由于Robolectric在较早版本上运行,因此希望它存在,这就是为什么您看到此错误的原因。
现在,您可以将其添加回:
android {
useLibrary 'org.apache.http.legacy'
}
作为详细的here。
GitHub票证已开放给Robolectric修复。您可以按照线程/票证here进行操作。
更新:
正如某些人正确指出的那样,一种更好的方法是在测试资源中创建一个
android.net.http.AndroidHttpClient
类。这将是首选方法,因为您仅修改测试源,而不修改生产代码以适应测试。