无法 运行 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:
非常感谢任何帮助!
要运行套件中的所有测试,您需要做的就是:
- 右键单击
ModelsTestSuite
- 点击"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
即这样不行。
希望对你有帮助。
我有 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:
非常感谢任何帮助!
要运行套件中的所有测试,您需要做的就是:
- 右键单击
ModelsTestSuite
- 点击"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
即这样不行。
希望对你有帮助。