无法 运行 android 测试套件:线程异常 "main" java.lang.ClassNotFoundException

Can't run android test suite: Exception in thread "main" java.lang.ClassNotFoundException

我有 2 个测试 classes 需要在测试套件上 运行 一个是 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 class 来测试我的 2 classes:

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

}

然后我必须创建一个 TestSuite运行ner class:

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 工作室,当我讨厌右键单击 > 运行 TestSuite运行ner...main() 我得到 Exception in thread "main" java.lang.ClassNotFoundException:

非常感谢任何帮助!

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

  1. 右键单击 ModelsTestSuite
  2. 点击"Run ModelsTestSuite"

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

NB! 在解决这个问题时,我发现了另一个奇怪的问题:除非我 disabled instant 运行 (Preferences - > 构建、执行、部署 -> 即时 运行 -> 启用即时 运行 - 取消选中)在 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 库模块和 link Android 应用程序模块作为这个 Java 库。不幸的是,您会收到此警告:

Warning:Ignoring dependency of module 'app' on module 'lib'. Java modules cannot depend on Android modules

即这样不行。

希望对你有帮助。