0

アクティビティではないクラスを実行しようとしてsoundkeeperいますが、コンテキストが必要であり、コンテキストを提供する方法がわかりません。これまで単体テストを行ったことがないので、単体テストを行うのは初めてです。これは、テストクラス用に持っているコードです

public class SoundKeeperTest {
SoundKeeper sounds;
Context mContext;

@Before
public void setUp() throws Exception {
    sounds = new SoundKeeper();
}

@After
public void tearDown() throws Exception {
}

@Test
public void testAddSound() {
    sounds.initSounds(mContext);

}

@Test
public void testPlaySound() {
    fail("Not yet implemented");
}

}

からコンテキスト メソッドを取得しようとするとInstrumentationTestCase、次のエラーが表示されます。

java.lang.NoClassDefFoundError: android/test/InstrumentationTestCase
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at                                 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: android.test.InstrumentationTestCase
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 18 more
4

1 に答える 1

1

Android には、さまざまな動作をテストするために使用できる多くのテスト ケース クラスがあります。

標準の単体テストでは、AndroidTestCase クラスを拡張します。これにより、Junit 3 API を使用して Android ランタイム依存関係のないクラスをテストできるようになります。

ただし、Android ランタイムに依存するクラス、つまり Activity サブクラスをテストする場合は、いくつかの特別な TestCase クラスを確認する必要があります。

InstrumentationTestCaseは最も基本的な TestCase 実装の 1 つで、テスト コンテキストへのアクセスを提供します。アクティビティ テストをテストするための便利なメソッドを提供するのは、より専門的なクラスによるサブクラスです。つまり、ActivityInstrumentationTestCase2です。

あなたの目的のために、InstrumentationTestCase をサブクラス化し、含まれている Instrumentation オブジェクトを使用して Context への参照を取得することで、必要なものすべてにアクセスする必要があります。

getInstrumentation().getContext();

Android Testing Documentationガイドは、利用可能な TestCase クラスがアプリケーションであることを理解するための良い参照ポイントです。

于 2013-05-11T15:12:38.597 に答える