【发布时间】:2014-11-11 14:29:33
【问题描述】:
我正在尝试为我的 Android 应用程序创建一些简单的测试,但在让测试运行时遇到了问题。我在尝试运行测试时不断收到 NoClassDefFound 错误,但我似乎无法弄清楚它的原因是什么。如果我能换一双新的眼睛来看看这个,我将不胜感激。
编辑:这是结构的图片:
这是我不断收到的错误:
junit.framework.AssertionFailedError: Exception in constructor: testScanResultNotNull (java.lang.NoClassDefFoundError: nl.hanze.myhealth.ScanResultActivity
at nl.hanze.myhealth.CameraTest.<init>(CameraTest.java:14)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at junit.runner.BaseTestRunner.getTest(BaseTestRunner.java:118)
at android.test.AndroidTestRunner.getTest(AndroidTestRunner.java:149)
at android.test.AndroidTestRunner.setTestClassName(AndroidTestRunner.java:57)
at android.test.suitebuilder.TestSuiteBuilder.addTestClassByName(TestSuiteBuilder.java:80)
at android.test.InstrumentationTestRunner.parseTestClass(InstrumentationTestRunner.java:443)
at android.test.InstrumentationTestRunner.parseTestClasses(InstrumentationTestRunner.java:424)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:370)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4435)
at android.app.ActivityThread.access$1300(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
相机测试
package nl.hanze.myhealth;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
public class CameraTest extends ActivityInstrumentationTestCase2<ScanResultActivity> {
ScanResultActivity mActivity;
public CameraTest(){
super(ScanResultActivity.class);
}
@Override
protected void setUp()throws Exception{
super.setUp();
mActivity = getActivity();
}
@SmallTest
public void testScanResultNotNull(){
boolean test = mActivity.generateScanResult();
assertNotNull(test);
}
@Override
protected void tearDown() throws Exception{
super.tearDown();
}
}
扫描结果活动
package nl.hanze.myhealth;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.util.Random;
public class ScanResultActivity extends Activity {
Random rand = new Random();
public ScanResultActivity(){
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan_result);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.scan_result, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
protected boolean generateScanResult(){
boolean positive_scanresult;
int max = 10;
int min = 1;
int randomNum = rand.nextInt((max - min) + 1) + min;
if(randomNum >= 6){
positive_scanresult = true;
}else{
positive_scanresult = false;
}
return positive_scanresult;
}
}
【问题讨论】:
-
您是作为 Android 测试而不是 JUnit 测试运行的吗?
-
@helleye 我相信我正在将测试作为 Android 测试运行,是的。
-
从代码看来,您的测试类在
package nl.hanze.myhealth;中,而不是在测试包中。 -
@helleye 我在 OP 中包含了结构的图片。 androidTest 文件夹由 Android Studio 生成。
-
错误状态:
(java.lang.NoClassDefFoundError: nl.hanze.myhealthtests.ScanResultActivity)。那么你在哪里定义了 nl.hanze.myhealthtests 呢?
标签: android unit-testing noclassdeffounderror