web-dev-qa-db-ja.com

Androidローカルユニットテスト)を実行してもLog.d()が何も出力しないのはなぜですか?

Android Local Unit Test を実行しているときに何かを印刷しようとしていますが、何も起こりません。どうしたの?どうすれば修正できますか?

http://developer.Android.com に関するドキュメントを調べたところ、AndroidローカルユニットテストがマシンのJVMで実行されていることがわかりました。Android.jarファイルはユニットテストの実行に使用されるコードには実際のコードが含まれていないため、Log.d()は何も出力しません。ログを出力する場合、どうすればよいですか?

ここに私のコード、 FeedbackModelTest.Javasrc/test/mainディレクトリにあります。

package com.upward.reader.mvp.model;

import Android.util.Log;

import com.upward.reader.mvp.bean.FeedbackBean;
import com.upward.reader.net.RequestJSONCallback;

import org.junit.Test;

import Java.io.IOException;
import Java.util.HashMap;
import Java.util.Map;

public class FeedbackModelTest {

@Test
public void postFeedback() throws Exception {
    final String url = "http://test.guguread.com/interface/app/user/feedback?";
    Map<String, String> params = new HashMap<>();
    params.put("content", "content");
    new FeedbackModel().postFeedback(url, params, new RequestJSONCallback<FeedbackBean>() {

        @Override
        public void onResponse(FeedbackBean result) throws IOException {
            Log.d("TAG", result.toString());
        }

        @Override
        public void onFailure(Exception e) {
            e.printStackTrace();
        }

    });
}

}

19
Will Tang

標準出力System.out.println("Hello StackOverflow")の代わりにLog.x()を使用する必要があります。次に、実行タブでログ情報を確認できます。 enter image description here

2017/12/16更新Runタブに出力が表示されない場合は、Android Monitorタブで出力を検索します。

39
Jeff T.

テストになんらかの形式のAndroid関連コード(Log.d)を含める必要がある場合は、コードが参照するAndroid.jarコードのように機能するように設計されたRobolectricなどのテストフレームワークを使用できます。 Robolectricで実行するようにテストランナーを構成し、robolectricの構成アノテーションに適切な構成フラグを設定することで、ロギングメソッドを使用してロギングを有効にできます。

0
Josh Kitchens

から 単体テストのサポート

単体テストの実行に使用されるAndroid.jarファイルには、実際のコードが含まれていません-これは、Androidシステムイメージによって提供されます実際のデバイス。代わりに、すべてのメソッドが例外をスローします(デフォルト)。これは、ユニットテストがコードのみをテストし、Androidプラットフォームの特定の動作に依存しないことを確認するためです(Mockitoを使用して明示的にモックしていないなど)。問題があることが判明した場合は、以下のスニペットをbuild.gradleに追加して、この動作を変更できます。

  Android {
  // ...
  testOptions { 
    unitTests.returnDefaultValues = true
  }
}
0
Luis