Java androidjunit:Android.net.Uri中的方法方案&;建设者不被嘲笑

Java 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

我正试图学习如何在Android中进行单元测试,我被这个特殊的问题所困扰。我搜索了以前的SO帖子,但没有一篇与此错误相关。我得到一个例外:

java.lang.RuntimeException:android.net.Uri$Builder中的方法方案未被模拟。有关详细信息,请参阅

为什么说Uri.Builder的方法“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());
    }

}
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?这是很久以前的事了,我知道这里涉及的每件事都发生了变化,但我现在不经常处理这个问题。我想我脑子里想的是机器人地图有它自己的嘲弄,但老实说,我不记得这是不是真的。