为上下文运行jUnit测试

时间:2013-05-11 15:01:53

标签: android junit

我正在尝试运行我的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

1 个答案:

答案 0 :(得分:1)

Android有许多测试用例类,可用于测试各种行为。

对于标准单元测试,您可以扩展AndroidTestCase类,使您能够使用Junit 3 API测试没有Android运行时依赖性的类。

如果您希望测试依赖于Android运行时的类,即Activity子类,那么您需要查看一些特殊的TestCase类。

InstrumentationTestCase是最基本的TestCase实现之一,提供对测试上下文的访问。它是更专业的类的进一步子类,为测试活动测试提供便利方法,即ActivityInstrumentationTestCase2

出于您的目的,您应该通过继承InstrumentationTestCase并使用包含的Instrumentation对象获取对Context的引用来访问您需要的所有内容:

getInstrumentation().getContext();

Android Testing Documentation指南是了解可用的TestCase类是其应用程序的一个很好的参考点。