1. ホーム
  2. android

[解決済み] Androidのテストランナーで "Empty test suite "と表示されるのはなぜですか?

2023-01-08 20:38:06

質問

IntelliJ/Android が "Empty test suite" を報告する理由を突き止めようと、ここで壁に頭を打ち付けています。私は2つのIntelliJモジュール(Eclipseの"Projects")で小さなプロジェクトを持っています。ユニットテストモジュールは独自のAndroidManifest.xmlを持っており、私はそれを一番下に貼り付けました。私は ActivityUnitTestCase に依存することになるため、テストは Context -オブジェクトに依存するからです。

メインモジュールのパッケージ名は nilzor.myapp . test モジュールのパッケージ名は nilzor.myapp.tests

なぜテストランナーは testBlah() -メソッドをテストとして検出しないのでしょうか?

<?xml version="1.0" encoding="utf-8"?>
<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="nilzor.myapp.tests"
          android:versionCode="1"
          android:versionName="1.0">
    <!-- We add an application tag here just so that we can indicate that
         this package needs to link against the android.test library,
         which is needed when building test cases. -->
    <application>
        <uses-library android:name="android.test.runner"/>
    </application>
    <!--
    This declares that this application uses the instrumentation test runner targeting
    the package of nilzor.myapp.  To run the tests use the command:
    "adb shell am instrument -w nilzor.myapp.tests/android.test.InstrumentationTestRunner"
    -->
    <instrumentation android:name="android.test.InstrumentationTestRunner"
                     android:targetPackage="nilzor.myapp"
                     android:label="Tests for nilzor.myapp"/>
</manifest>

そして、これが私のテストクラスです:。

package nilzor.myapp.tests;

public class NilzorSomeTest<T extends Activity> extends ActivityUnitTestCase<T>{
    public NilzorSomeTest(Class<T> activityClass){
        super(activityClass);
    }

    @SmallTest
    public void testBlah(){
        assertEquals(1,1);
    }
}

を読みました。 テストの基礎 を読みました。 アクティビティ・テスト・ドキュメント を作成し、以下のように試してみました。 ハローワールドテストブログ Eclipse用であるにもかかわらず。私はテストランナーが私のテストを見つけ、実行することを得ることができません。私は何を間違えているのでしょうか?

まだよくわからないと感じる質問がいくつかあります。

  1. ユニット テスト メソッドの上にアノテーションが必要ですか。
  2. メソッドの前に "test" を付ける必要がありますか、またはそれは JUnit テストのためだけですか?
  3. のサブパッケージでテストを行うことはできますか? nilzor.myapp.tests ?

しかし、この投稿の主な疑問は なぜテストランナーは私のテストを検出しないのでしょうか? ?

どのように解決するのですか?

テストクラスにデフォルトのコンストラクタを用意する必要があるなど。

package nilzor.myapp.tests;

public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
    public NilzorSomeTest(){
        super(ActivityYouWantToTest.class);
    }

    @SmallTest
    public void testBlah(){
        assertEquals(1,1);
    }
}

他の質問について

  1. いいえ、私のテストはまだ注釈なしで実行されていますが、注釈を持つことは良い習慣だと思います。実行するテストのサイズを指定することができます。参照 Androidにおける@SmallTest、@MediumTest、@LargeTestのアノテーションの目的は何ですか? を参照してください。

  2. はい、"test" の接頭辞が必要です。InteliJでは、"test"のプレフィックスがない場合、"method never used"の警告を出し、テスト実行時にそのメソッドをスキップします。

  3. はい、私は私のテストをサブパッケージに整理し、それはうまくいっているようです。