我有 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 中得到异常:
非常感谢任何帮助!
最佳答案
要运行套件中的所有测试,您所需要做的就是:
- 在
ModelsTestSuite
中单击鼠标右键 - 点击“运行 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 库的依赖项。不幸的是,您会收到此警告:
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/