2016-10-25 6 views
1

私はAndroidで単体テストを行う方法を学ぼうとしていますが、私はこの特定の問題に悩まされています。以前のSOの投稿を検索しましたが、このエラーに関連するものはありません。私はこの例外が発生しています:Android junit:android.net.Uri&Builderのメソッドスキーム

java.lang.RuntimeException:android.net.Uriのメソッドスキーム$ mockedされていません。詳細については、http://g.co/androidstudio/not-mockedを参照してください。

なぜ、Uri.Builderのメソッド "方式"を嘲笑する必要があるのですか?ありがとう!

MovieDBAPITest.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 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"; 
    } 

} 

答えて

4

うん、そのようなテストは、Android SDKを吸います。 Uriクラスは、dev jarに実装されていません。

これらの状況のラッパークラスを作成し、それらのラッパーをテストで使用することをお勧めします。他の可能性は、RobolectricまたはAndroid Instrumentation Testsを使用することです。

関連する問題