Java androidjunit:Android.net.Uri中的方法方案&;建设者不被嘲笑
我正试图学习如何在Android中进行单元测试,我被这个特殊的问题所困扰。我搜索了以前的SO帖子,但没有一篇与此错误相关。我得到一个例外: java.lang.RuntimeException:android.net.Uri$Builder中的方法方案未被模拟。有关详细信息,请参阅 为什么说Uri.Builder的方法“scheme”需要模拟?谢谢 moviedbapest.javaJava androidjunit:Android.net.Uri中的方法方案&;建设者不被嘲笑,java,android,unit-testing,junit,Java,Android,Unit Testing,Junit,我正试图学习如何在Android中进行单元测试,我被这个特殊的问题所困扰。我搜索了以前的SO帖子,但没有一篇与此错误相关。我得到一个例外: java.lang.RuntimeException:android.net.Uri$Builder中的方法方案未被模拟。有关详细信息,请参阅 为什么说Uri.Builder的方法“scheme”需要模拟?谢谢 moviedbapest.java package com.karljamoralin.popularmovies; import org.jun
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());
}
}
package com.karljamoralin.popularmovies;
import android.net.Uri;
import android.os.AsyncTask;
import android.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";
}
}
MovieDBAPI.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());
}
}
package com.karljamoralin.popularmovies;
import android.net.Uri;
import android.os.AsyncTask;
import android.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";
}
}
package com.karljamoralin.popularmovies;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.util.Log;
公共类MovieDBAPI扩展异步任务{
最后一个字符串标记=getClass().getSimpleName();
@凌驾
受保护的Void doInBackground(字符串…参数){
Uri=buildUri(参数[0]);
Log.v(标记,uri.toString());
//连接到URL
//获取字符串输入
//解析字符串输入
//返回M
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
}
Uri构建Uri(字符串模式){
最终字符串SCHEME=“https”;
最终字符串AUTHORITY=“api.themoviedb.org”;
最终字符串路径1=“3”;
最后一个字符串PATH2=“movie”;
最终字符串API_KEY=“movie”;
final String LANGUAGE=“LANGUAGE”;
Uri.Builder uriBuilder=新的Uri.Builder();
方案(方案),;
三.权力(权力);
附加路径(路径1);
附加路径(路径2);
uriBuilder.appendPath(模式);
uriBuilder.appendQueryParameter(API_键,“测试”);
uriBuilder.appendQueryParameter(语言“en-US”);
返回uriBuilder.build();
}
字符串测试(){
返回“a”;
}
}
是的,Android SDK的这种测试很糟糕。
Uri
类未在dev jar中实现
我的建议是为这些情况创建包装器类,并在测试中使用这些包装器。其他的可能性是使用or。你会如何在Uri.Builder中使用Robolectric?这是很久以前的事了,我知道这里涉及的每件事都发生了变化,但我现在不经常处理这个问题。我想我脑子里想的是机器人地图有它自己的嘲弄,但老实说,我不记得这是不是真的。