Android Local Unit Test を実行しているときに何かを印刷しようとしていますが、何も起こりません。どうしたの?どうすれば修正できますか?
http://developer.Android.com に関するドキュメントを調べたところ、AndroidローカルユニットテストがマシンのJVMで実行されていることがわかりました。Android.jarファイルはユニットテストの実行に使用されるコードには実際のコードが含まれていないため、Log.d()は何も出力しません。ログを出力する場合、どうすればよいですか?
ここに私のコード、 FeedbackModelTest.Javaがsrc/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();
}
});
}
}
テストになんらかの形式のAndroid関連コード(Log.d)を含める必要がある場合は、コードが参照するAndroid.jarコードのように機能するように設計されたRobolectricなどのテストフレームワークを使用できます。 Robolectricで実行するようにテストランナーを構成し、robolectricの構成アノテーションに適切な構成フラグを設定することで、ロギングメソッドを使用してロギングを有効にできます。
から 単体テストのサポート :
単体テストの実行に使用されるAndroid.jarファイルには、実際のコードが含まれていません-これは、Androidシステムイメージによって提供されます実際のデバイス。代わりに、すべてのメソッドが例外をスローします(デフォルト)。これは、ユニットテストがコードのみをテストし、Androidプラットフォームの特定の動作に依存しないことを確認するためです(Mockitoを使用して明示的にモックしていないなど)。問題があることが判明した場合は、以下のスニペットをbuild.gradleに追加して、この動作を変更できます。
Android {
// ...
testOptions {
unitTests.returnDefaultValues = true
}
}