2015-12-16 25 views
0

我有我需要在一个测试套件之一运行2个测试类是RestaurantModelTest另一个是CartModelTest.class不能运行Android测试套件:在线程“主要”抛出java.lang.ClassNotFoundException异常

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

任何帮助,非常感谢!

+0

我想你错过了一些jar文件 – SpringLearner

回答

1

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

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

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

enter image description here

NB!在解决此问题时,我发现了另一个奇怪的问题:除非我在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'的依赖。 Java模块不能依赖于Android模块

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

我希望它有帮助。

+0

omg那就是它太简单了!但试图找到文件是有点diffucult你是最好的谢谢!!!!!,你怎么知道如何做到这一点?网上有任何文档我错过了吗? – Jeka

+0

@JesSys我的荣幸!实际上,我还没有看到关于它的文档:这种方法看起来与Android测试框架的其余部分一致,显然我花了很多时间挖掘Android的测试:-)。所以我只是尝试了 - 幸运的是它工作。 –

相关问题