【问题标题】:Can't run android test suite: Exception in thread "main" java.lang.ClassNotFoundException无法运行 android 测试套件:线程“主”java.lang.ClassNotFoundException 中的异常
【发布时间】:2015-12-16 16:20:23
【问题描述】:

我需要在测试套件上运行 2 个测试类,一个是 RestaurantModelTest另一个是 CartModelTest.class

@Config(sdk = 16, manifest = "src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class RestaurantModelTest {

    //setUp code here...

    @Test
    public void testFindByLocation() throws Exception {
         //test code here
    }

}

所以我遵循了一些在线教程,他们指定创建一个像这样的 TestSuite 类和我要测试的 2 个类:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
        RestaurantModelTest.class,
        CartModelTest.class
})
public class ModelsTestSuite {

}

然后我必须创建一个 TestSuiteRunner 类:

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestSuiteRunner {


    public static void main(String[] args){
        Result result = JUnitCore.runClasses(ModelsTestSuite.class);
        for (Failure failure : result.getFailures()){
            System.out.println(failure.toString());
        }
        System.out.println(result.wasSuccessful());

    }
}

我正在使用 android studio,当我讨厌右键单击 > 运行 TestSuiteRunner...main() 我得到 Exception in thread "main" java.lang.ClassNotFoundException:

非常感谢任何帮助!

【问题讨论】:

  • 我认为您缺少一些 jar 文件

标签: java android junit robolectric android-testing


【解决方案1】:

在套件中运行所有测试所需要做的就是:

  1. 右键单击ModelsTestSuite
  2. 点击“运行 ModelsTestSuite”

就是这样,套件中的所有测试都将被执行。你真的不需要 TestSuiteRunner 类:

注意!在解决这个问题时,我发现了另一个奇怪的问题:除非我禁用即时运行(首选项 -> 构建、执行、部署 -> 即时运行 ->在 Android Studio 2.0 中启用即时运行 - 取消选中),我所有的 Robolectric 测试都以java.lang.ClassNotFoundException 失败。仅供参考。

您得到java.lang.ClassNotFoundException 的原因是普通java 项目和Android 项目不兼容。你可以在这里阅读更多:Can Android Studio be used to run standard Java projects?

因此,理论上,要以这种形式拥有 TestSuiteRunner,您可以将其移动到单独的 Java 库模块并将 Android 应用程序的模块链接为该 Java 库的依赖项。不幸的是,您会收到以下警告:

警告:忽略模块“app”对模块“lib”的依赖。 Java 模块不能依赖于 Android 模块

即这种方式是行不通的。

希望对你有帮助。

【讨论】:

  • 天哪,就是它太简单了!!!!但是试图找到文档有点困难,你是最好的谢谢!!!!!!!,你怎么知道怎么做的?我缺少在线文档吗?
  • @JesSys 我很高兴!实际上,我还没有看到有关它的文档:这种方法似乎与 Android 测试框架的其余部分一致,显然我花了太多时间研究 Android 的测试 :-) 。所以我只是尝试了 - 幸运的是它成功了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 2017-02-12
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多