首先,有類似的問題,如here或here,但我沒有一些外部庫,也沒有lib文件夾,也沒有一些包括罐子什麼的,所以我想知道我在做什麼錯誤Android Junit測試。NoClassDefFoundError執行Android JUnit測試時
我的項目結構如下:
正如你可以看到我有針對Android JUnit測試一個單獨的項目。測試類看起來是這樣的:
public class PersistenceManager {
private static final String FILENAME = "kpzwien_storage";
public static void persist(String data, Context context) throws IOException {
FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(data.getBytes());
fos.close();
}
public static String read(Context context) throws IOException {
FileInputStream fis = context.openFileInput(FILENAME);
StringBuffer fileContent = new StringBuffer("");
byte[] buffer = new byte[1024];
while (fis.read(buffer) != -1) {
fileContent.append(new String(buffer));
}
return fileContent.toString();
}
}
,這裏是它的測試用例:
public class PersistenceManagerTest extends AndroidTestCase {
private final String FILENAME_PREFIX = "test.";
@Before
public void setUp() {
MockContentResolver resolver = new MockContentResolver();
RenamingDelegatingContext renamingDelegatingContext = new RenamingDelegatingContext(new MockContext(), getContext(), FILENAME_PREFIX);
Context context = new IsolatedContext(resolver, renamingDelegatingContext);
setContext(context);
}
public void testPersistAndRead() throws IOException {
String testData = "foobar";
PersistenceManager.persist(testData, getContext());
String result = PersistenceManager.read(getContext());
assertEquals(testData, result);
}
}
測試項目的清單如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.devgems.android.kurzparkzonewien.androidtests"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="net.devgems.android.kurzparkzonewien.activities" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
</manifest>
targetPackage是應用程序Instrumentation對象將根據元素在它的清單文件中分配的包名稱標識運行。 (來源:http://developer.android.com/guide/topics/manifest/instrumentation-element.html
包在我的主項目的名稱是
package="net.devgems.android.kurzparkzonewien.activities"
所以這也正是targetPackage點,如果我爲「Android的JUnit測試」跑,我總是得到的NoClassDefFoundError但??爲什麼任何想法,我使用ADT 20.0.3,的Eclipse朱諾
最後這裏是logcat的輸出:
09-22 16:00:12.745: I/TestRunner(1528): java.lang.NoClassDefFoundError: net.devgems.android.kurzparkzonewien.controller.PersistenceManager 09-22 16:00:12.745: I/TestRunner(1528): at net.devgems.android.kurzparkzonewien.androidtests.PersistenceManagerTest.testPersistAndRead(PersistenceManagerTest.java:32) 09-22 16:00:12.745: I/TestRunner(1528): at java.lang.reflect.Method.invokeNative(Native Method) 09-22 16:00:12.745: I/TestRunner(1528): at java.lang.reflect.Method.invoke(Method.java:521) 09-22 16:00:12.745: I/TestRunner(1528): at junit.framework.TestCase.runTest(TestCase.java:154) 09-22 16:00:12.745: I/TestRunner(1528): at junit.framework.TestCase.runBare(TestCase.java:127) 09-22 16:00:12.745: I/TestRunner(1528): at junit.framework.TestResult$1.protect(TestResult.java:106) 09-22 16:00:12.745: I/TestRunner(1528): at junit.framework.TestResult.runProtected(TestResult.java:124) 09-22 16:00:12.745: I/TestRunner(1528): at junit.framework.TestResult.run(TestResult.java:109) 09-22 16:00:12.745: I/TestRunner(1528): at junit.framework.TestCase.run(TestCase.java:118) 09-22 16:00:12.745: I/TestRunner(1528): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 09-22 16:00:12.745: I/TestRunner(1528): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 09-22 16:00:12.745: I/TestRunner(1528): at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430) 09-22 16:00:12.745: I/TestRunner(1528): at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447) 09-22 16:00:12.745: I/TestRunner(1528): ----- end exception -----
不應該你的測試用例類有一個構造函數嗎?我沒看到它。 像在Android的例子:http://developer.android.com/tools/testing/activity_test.html –
我不測試一個活動。應該如何構造? – Bevor
順便說一下,AndroidTestCase中沒有這樣的構造函數。 – Bevor