浏览 5072 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-15
有一个问题在问答频道放了好几天,都无人回答,先拿过来重发下,也想依借此为引子,说说android下的测试驱动开发。 问题是这样, 测试类继承TestCase,其中有试图mock一个Cursor进行单元测试,一跑就ClassNotFoundException 测试类: import junit.framework.TestCase; import android.database.Cursor; public class ContactHandlerTest extends TestCase { private ContactHandler handler; @Override protected void setUp() throws Exception { super.setUp(); handler = new ContactHandler(); } public void testConvertToString() { Cursor mockCursor = new MockCursor(); String [] result = handler.convertToString(mockCursor); assertEquals("kkkk(2222)", result[0]); assertEquals("aaaa(3333)", result[1]); } } MockCursor: 仅仅mock了一些想要的动作 import android.content.ContentResolver; import android.database.CharArrayBuffer; import android.database.ContentObserver; import android.database.Cursor; import android.database.DataSetObserver; import android.net.Uri; import android.os.Bundle; public class MockCursor implements Cursor { private String [][] dump = new String [][] { {"kkkk", "2222"}, {"aaaa", "3333"} }; …………………… ………… …… } Manifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo.contact.test" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="android.test.runner" /> </application> <uses-sdk android:minSdkVersion="7" /> <instrumentation android:targetPackage="com.demo.contact" android:name="android.test.InstrumentationTestRunner" /> </manifest> 异常栈: java.lang.NoClassDefFoundError: android/database/Cursor at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Unknown Source) at java.lang.Class.getMethod0(Unknown Source) at java.lang.Class.getMethod(Unknown Source) Caused by: java.lang.ClassNotFoundException: android.database.Cursor 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) ... 10 more BTW,昨天在跑另个case的是有也遇到ClassNotFound,后来继承关系从TestCase换成 ActivityInstrumentationTestCase2就正常了,从这里推测应该是android.*这个package下面的类都需要 android.test下的TestCase才能跑的动。如果是这样的话,要测一些东西还是挺费劲的,等于带着容器一起跑测试。 更不明白的就是,android的classLoader是一种怎样的工作机制?不知道大家有无遇到类似的问题,有什么好的解决方案。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-16
http://developer.android.com/guide/topics/testing/testing_android.html
感觉文档说的很详尽了啊 |
|
返回顶楼 | |
发表时间:2010-08-20
试了好久,http://developer.android.com/guide/topics/testing/testing_android.html 都打不开。
甚至http://developer.android.com也打不开。 下载的docs好像没有testing的topics~~ |
|
返回顶楼 | |
发表时间:2010-08-23
shiftjava 写道 试了好久,http://developer.android.com/guide/topics/testing/testing_android.html 都打不开。
甚至http://developer.android.com也打不开。 下载的docs好像没有testing的topics~~ http://androidappdocs.appspot.com/index.html |
|
返回顶楼 | |