6

現在のプロジェクトで Robolectric テストを実行して動作させようとしていますが、うまくいきません。私の好みは、これらを Android Studio 1.1.0+ 内で実行することです。これは私のプロジェクト構造です:

ここに画像の説明を入力

ここに私のテストがあります:

import android.widget.Button;

import com.mycompany.android.app.R;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;

import static org.junit.Assert.assertNotNull;

@Config(manifest = "AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class SplashActivityTest {

    private SplashActivity splashActivity;

    @Before
    public void setup() {
        splashActivity = Robolectric.buildActivity(SplashActivity.class).create().start().resume().get();
    }

    @Test
    public void shouldNotBeNull() {
        Button signUpButton = (Button) splashActivity.findViewById(R.id.sign_up_button);
        assertNotNull(signUpButton);

        Button loginButton = (Button) splashActivity.findViewById(R.id.login_button);
        assertNotNull(loginButton);
    }

}

マニフェストへのパスを変更してフレームワークにテストを見つけさせるために何をしようとしても、それを見つけることができません-WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only.メッセージまたはAPI Level XX is not supported - Sorry!メッセージを取得します。最後に、これがテストの実行時に次のエラーが発生する理由だと思います。

android.content.res.Resources$NotFoundException: unknown resource 2130903074

私は実験的なオプションをオンにしており、適切な Gradle プラグインを構成しています (単体テストは正常に動作します) が、インストルメンテーション テストを実行するために何が欠けているのかわかりません。

アプリレベルのビルド ファイル:

apply plugin: 'org.robolectric'

testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
testCompile 'org.robolectric:robolectric:2.4'
testCompile 'org.hamcrest:hamcrest-core:1.1'
testCompile 'org.hamcrest:hamcrest-library:1.1'
testCompile 'org.hamcrest:hamcrest-integration:1.1'

最上位ビルド ファイル:

dependencies {
    classpath 'com.android.tools.build:gradle:1.1.0'
    classpath 'org.robolectric:robolectric-gradle-plugin:1.0.0'
}
4

6 に答える 6

10

Android Studio 1.1.0 http://nenick-android.blogspot.de/2015/02/android-studio-110-beta-4-and.htmlでrobolectric を有効にする方法について、段階的なガイドを書きましたあなたの問題の答えを見つけてください。そして例https://github.com/nenick/AndroidStudioAndRobolectric

于 2015-02-24T17:45:15.233 に答える
2

あなたの場合、次の変更が役立つかもしれません:

@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18, reportSdk = 18)

ただし、@nenickガイドもお読みください

于 2015-02-24T19:39:22.467 に答える
2

数日間苦労した後、最終的にあなたの質問の根本的な原因を突き止めました。

WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. messages, or API Level XX is not supported - Sorry!

stackOverFlow で見つけた多くの回答では、次のようにマニフェスト ファイルのパスを @Config に追加するように指示されました

@Config(manifest = "src/main/AndroidManifest.xml")

私のプロジェクトの 1 つで動作しましたが、新しいプロジェクトを開いてテスト環境をセットアップすると、同じエラー メッセージが表示されました。

この背後にある理由は、プロジェクトの作業ディレクトリが異なるためです。最初に作業ディレクトリを見つけてから、@Config(maniest = "...") でそのディレクトリへの相対パスを指定する必要があります。

Android Studio の作業ディレクトリはどこにありますか?

Run -> Edit Configurations -> Junit -> Your Test 
-> Configuration Tab -> **Working directory:**

私の作業ディレクトリを例にとると、私の作業ディレクトリは

"/Users/Bible/AndroidstudioProjects/MVP"

だから私の AndroidManifest.xml へのパスは

@Config(manifest = "app/src/main/AndroidManifest.xml")

どうぞ!この答えがあなたの人生を楽にしてくれることを願っています。

于 2015-07-17T06:23:36.193 に答える
2

私は同じエラーに直面しました。いくつかのフレーバーとビルドタイプを使用しているため、機能させるための手順があります。

1) Android スタジオ テストの実行構成

ビルド バリアント メニュー

Windows でも作業ディレクトリを $MODULE_DIR$ に設定する必要があります。robolectric.org/getting-started/ はそう言うべきです。

実行構成メニュー

2) 単体テストには次のように注釈を付ける必要があります。

@RunWith(RobolectricTestRunner.class) 
@Config(constants = BuildConfig.class, sdk = 21, manifest = "src/main/AndroidManifest.xml", packageName = "com.example.yourproject") 
public class SomeFragmentTest {

ここには、マニフェスト ファイルと packageName へのプレーン リンクがあります。

于 2015-11-25T09:56:28.433 に答える
0

私はちょうどに変更しました:

@RunWith(RobolectricTestRunner.class)

そしてそれは動作します。他のすべての構成は不要のようです。

于 2015-07-09T15:10:45.777 に答える