0

私は最近、自分のアプリケーションの 1 つをテストするために Robolectric gradle プラグインを使用することを検討し始めました。プラグイン自体はプロジェクト内でプロジェクト内にセットアップするのは簡単ですが、サンプル テストを実行しようとすると同じエラーが発生し続けます。私のコードは次のとおりです。

マイ アクティビティ

package com.example.trial.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.my, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}


public void emptyMethod(String empty) {

}
}

私のRobolectricテスト

package com.example.trial.myapplication;

import android.app.Application;
import android.test.ApplicationTestCase;
import android.test.suitebuilder.annotation.SmallTest;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class ApplicationTest extends ApplicationTestCase<Application> {
private MyActivity myActivity;

public ApplicationTest() {
    super(Application.class);
}

@Before
public void setUp() throws Exception {
    myActivity = Robolectric.buildActivity(MyActivity.class).create().get();
}

@SmallTest
public void testSomething() throws Exception {
    assertTrue(myActivity != null);
}
}

テスト アプリケーションを実行すると、setup メソッドのコードを指す次のエラーがスローされます。

org.fest.reflect.exception.ReflectionError: Unable to find method '$$robo$getData' in com.example.ronand.myapplication.MyActivity with parameter type(s) []
at org.fest.reflect.method.Invoker.lookupInClassHierarchy(Invoker.java:78)
at org.fest.reflect.method.Invoker.createInvoker(Invoker.java:60)
at org.fest.reflect.method.Invoker.newInvoker(Invoker.java:55)
at org.fest.reflect.method.MethodReturnType.in(MethodReturnType.java:66)
at org.robolectric.bytecode.ShadowWrangler.shadowOf(ShadowWrangler.java:434)
at org.robolectric.Robolectric.shadowOf_(Robolectric.java:1034)
at org.robolectric.util.ComponentController.<init>(ComponentController.java:36)
at org.robolectric.util.ActivityController.<init>(ActivityController.java:45)
at org.robolectric.util.ActivityController.<init>(ActivityController.java:41)
at org.robolectric.Robolectric.buildActivity(Robolectric.java:1376)
at com.example.trial.myapplication.ApplicationTest.setUp(ApplicationTest.java:23)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1741)

このエラーが の使用に関連していることを示すいくつかの質問に遭遇しましたがRobolectric.shadowOf()、コードのどこにも使用していません。誰かが私を正しい方向に向けることができれば、私はそれを大いに感謝します.

ありがとう!

4

1 に答える 1

1

それが中心的な問題かどうかはわかりませんが、Robolectric と Android のテスト フレームワークを混在させています。Robolectric は JVM でテストを実行し (エミュレーター/デバイスを必要とせず、使用しません)、JUnit 3 ではなく 4 を使用します。

したがって、ApplicationTestCase やそのコンストラクターを拡張する必要はありません。注釈は @Test (JUnit4 からのもの) であり、@SmallTest (Android テストからのもの) ではありません。android.test.* からのインポートがこれ以上ない場合は、それが正しいことがわかります。

また、IDE でオプションが表示される場合は、これらを Android UI テストではなく JUnit テストとして実行してください。

于 2014-08-15T08:06:58.080 に答える