我已经建立了一个非常简单的项目来测试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类。这将是首选方法,因为您仅修改测试源,而不修改生产代码以适应测试。

09-12 05:05