有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    是的,Android SDK的这种测试很糟糕。 在dev jar中没有实现Uri

    我的建议是为这些情况创建包装器类,并在测试中使用这些包装器。其他可能性是使用RobolectricAndroid Instrumentation Tests