java安卓junit:Android中的方法方案。网Uri&Builder未被模拟
我正试图学习如何在Android中进行单元测试,我被这个特殊的问题所困扰。我搜索了以前的SO帖子,但没有一篇与此错误相关。我得到一个例外:
java.lang.RuntimeException: Method scheme in 安卓.net.Uri$Builder not mocked. See http://g.co/安卓studio/not-mocked for details.
为什么说Uri的方法是“scheme”。建筑商需要被嘲笑吗?谢谢
moviedbapest。java
package com.karljamoralin.popularmovies;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class MovieDBAPITest {
MovieDBAPI movieDBAPI = new MovieDBAPI();
@Test
public void URLValidator() {
assertEquals("https://api.themoviedb.org/3/movie/top_rated?api_key=test&language=en-US",
movieDBAPI.buildUri("top_rated").toString());
}
@Test
public void test() {
assertEquals("a", movieDBAPI.test());
}
}
MovieDBAPI。java
package com.karljamoralin.popularmovies;
import 安卓.net.Uri;
import 安卓.os.AsyncTask;
import 安卓.util.Log;
public class MovieDBAPI extends AsyncTask<String, Void, Void> {
final String TAG = getClass().getSimpleName();
@Override
protected Void doInBackground(String... params) {
Uri uri = buildUri(params[0]);
Log.v(TAG, uri.toString());
//Connect to URL
//Get string input
//Parse string input
//Return M
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
Uri buildUri(String mode) {
final String SCHEME = "https";
final String AUTHORITY = "api.themoviedb.org";
final String PATH1 = "3";
final String PATH2 = "movie";
final String API_KEY = "movie";
final String LANGUAGE = "language";
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.scheme(SCHEME);
uriBuilder.authority(AUTHORITY);
uriBuilder.appendPath(PATH1);
uriBuilder.appendPath(PATH2);
uriBuilder.appendPath(mode);
uriBuilder.appendQueryParameter(API_KEY, "test");
uriBuilder.appendQueryParameter(LANGUAGE, "en-US");
return uriBuilder.build();
}
String test() {
return "a";
}
}
# 1 楼答案
是的,Android SDK的这种测试很糟糕。 在dev jar中没有实现
Uri
类我的建议是为这些情况创建包装器类,并在测试中使用这些包装器。其他可能性是使用Robolectric或Android Instrumentation Tests