Tec*_*rat 29 data-binding android robolectric retrolambda
我已经建立了一个非常简单的项目来测试Robolectric + Data Binding + Retrolambda的集成.当我运行测试套装时,我收到以下消息:
Error:(30, 30) Gradle: error: cannot access AndroidHttpClient
class file for android.net.http.AndroidHttpClient not found
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我不在任何地方使用AndroidHttpClient.
此处发生错误,在"活动"行:
@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);
}
Run Code Online (Sandbox Code Playgroud)
该程序从不使用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("");
});
}
Run Code Online (Sandbox Code Playgroud)
关于什么是错的想法?
Ben*_*son 46
AndroidHttpClient 已在构建工具的第23版中从SDK中删除.
由于Robolectric针对早期版本运行,它预计它会在那里,这就是你看到这个错误的原因.
现在,您可以将其添加回:
android {
useLibrary 'org.apache.http.legacy'
}
Run Code Online (Sandbox Code Playgroud)
详见这里.
Robolectric有一张GitHub票可以解决这个问题.您可以在此处关注主题/票证.
更新:
正如一些人正确指出的那样,更好的方法是android.net.http.AndroidHttpClient在测试资源中创建一个类.这将是一种首选方法,因为您只是修改测试源而不是生产代码,以适应测试.
明显的问题和解决方案:
AndroidHttpClient已从API Level 23中的SDK中删除,而Robolectric设置为使用SDK 21运行测试:
AndroidHttpClient was removed from the SDK in API Level 23
Run Code Online (Sandbox Code Playgroud)
如果目标 SDK 是 28 或更大,那么根据此,我们必须在 AndroidManifest.xml 中添加以下行
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12127 次 |
| 最近记录: |