java - 无法运行android测试套件: Exception in thread "main" java. lang.ClassNotFoundException

标签 java android junit robolectric android-testing

我有 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() 时,我在线程“main”java.lang.ClassNotFoundException 中得到异常:

非常感谢任何帮助!

最佳答案

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

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

就是这样,套件中的所有测试都将被执行。您实际上并不需要 TestSuiteRunner 类:

enter image description here

注意!在解决这个问题时,我发现了另一个奇怪的问题:除非我禁用即时运行(首选项 -> 构建、执行、部署 -> 即时运行 ->在 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 库的依赖项。不幸的是,您会收到此警告:

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

即这样是行不通的。

希望对您有帮助。

关于java - 无法运行android测试套件: Exception in thread "main" java. lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34317022/

相关文章:

java - 当我尝试运行新的示例应用程序时,无法在Flutter中打开xmltree错误

Java 应用程序包装在 Windows 7 的 Windows XP 兼容模式下运行得更快

android - 尝试使用 WatchViewStub 启动 AnimationDrawable 时出现 NullPointerException

android - Google Books API 403 访问未配置

java - 如何从 selenium rc 生成结果

java - Eclipse 中的 Junit 测试失败,并出现 java.lang.NoClassDefFoundError : org/hamcrest/SelfDescribing

java - 搜索数组列表

java - 使用倒计时器功能防止这种情况发生

android - 如何将 OnClickListener 设置为 RecyclerView 中的两个按钮?

java - Junit:在没有实例的情况下调用私有(private)方法