Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在Android Studio上运行单元测试时出现NoClassDefFoundError_Android_Unit Testing_Noclassdeffounderror - Fatal编程技术网

尝试在Android Studio上运行单元测试时出现NoClassDefFoundError

尝试在Android Studio上运行单元测试时出现NoClassDefFoundError,android,unit-testing,noclassdeffounderror,Android,Unit Testing,Noclassdeffounderror,我正在尝试为我的Android应用程序创建一些简单的测试,但在让测试运行时遇到了问题。当我试图运行测试时,我不断收到NoClassDefFound错误,但是我似乎无法找出它的原因。如果我能换一双新的眼睛看这个,我会很感激的 编辑:以下是结构的图片: 以下是我不断发现的错误: junit.framework.AssertionFailedError: Exception in constructor: testScanResultNotNull (java.lang.NoClassDefFoun

我正在尝试为我的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)
1) 将您的测试放入包nl.hanze.myhealth.tests。 您可以使用Android Studio或手动执行此操作:

  • 在…\app\src\androidTest\java\nl\hanze\myhealth内创建一个新文件夹\
  • 将ApplicationTest.java和CameraTest.java移到…\app\src\androidTest\java\nl\hanze\myhealth\tests中\
  • 将每个java测试文件中的包名重命名为
    包nl.hanze.myhealth.tests
2) 在应用程序的build.gradle中,您需要:

defaultConfig {
    applicationId "nl.hanze.myhealth"
    testApplicationId "nl.hanze.myhealth.tests"
    ...
}

重建并运行。这应该足够了。

我在Android Studio中突然发现了这个错误,以包的形式运行测试(JUnit/Robolectric3/Gradle),不知道为什么。我能够独立地运行测试文件,但在一个包中同时运行所有测试时,我遇到了NoClassDefFoundError异常

结果表明运行时的类路径没有正确加载类。该问题无法在另一台机器上复制


为了修复它,我删除了我的project.idea文件夹和.iml文件,然后将整个Gradle项目重新导入Android Studio。然后成功了

这种情况也发生在我身上,我不确定原因是否与你相同,但为我解决的是一个简单的
文件->无效缓存/重新启动

你是作为Android测试而不是JUnit测试运行的吗?@helleye我相信我是作为Android测试运行测试的,是的。从代码上看,您的测试类似乎在
包nl.hanze.myhealth中,而不是在测试包中。@helleye我在OP中包含了结构的图片。androidTest文件夹是由Android Studio生成的。错误状态:
(java.lang.NoClassDefFoundError:nl.hanze.myhealthtests.ScanResultActivity)
。那么你在哪里定义了nl.hanze.myhealthtests呢?祝你在编写测试时好运。我最近有很多问题:)我不明白为什么重命名测试包是必要的,或者为什么它能工作。这通常是不必要的。测试通常与被测试的类在同一个包中。@AdilHussain,是的,我最近几次编写测试时,它没有重命名测试包。我想工具链中已经做了一些更新。感谢这个建议,另外我发现一些模块依赖项可能配置不正确。看,这是唯一正确的答案。
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;
        }
    }
defaultConfig {
    applicationId "nl.hanze.myhealth"
    testApplicationId "nl.hanze.myhealth.tests"
    ...
}