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

时间:2015-12-16 16:20:24

标签: 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
    }

}

所以我在网上关注了一些教程,他们指定用我的2个类来测试这样的TestSuite类:

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:

任何帮助真的很感激!

1 个答案:

答案 0 :(得分:1)

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

  1. 右键点击ModelsTestSuite
  2. 点击"运行ModelsTestSuite"
  3. 即便如此,套件中的所有测试都将被执行。你真的不需要TestSuiteRunner课程:

    enter image description here

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

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

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

      

    警告:忽略模块&app 39的依赖关系在模块' lib'。 Java模块不能依赖于Android模块

    即。它不会以这种方式工作。

    我希望,这有帮助。