RuntimeException when using ActivityUnitTestCase but not during ActivityInstrumentationTestCase2

I am trying to test MainActvity of an Android application with ActivityUnitTestCase. For some reason, I can't even run the test because it fails with the following error:

java.lang.RuntimeException: Exception during suite construction at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:238) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:537) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1594) Caused by: java.lang.NullPointerException: name == null at java.lang.Class.getConstructorOrMethod(Class.java:446) at java.lang.Class.getMethod(Class.java:915) at android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60) at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39) at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30) at com.android.internal.util.Predicates$OrPredicate.apply(Predicates.java:106) at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:42) at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31) at com.android.internal.util.Predicates$NotPredicate.apply(Predicates.java:122) at android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:253) at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:189) at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:371) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3943) at android.app.ActivityThread.access$1300(ActivityThread.java:127) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1189) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4447) at java.lang.reflect.Method.invokeNative(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method) 

I cannot debug it because it fails before it hits any breakpoint that I can put in the test case class. Any tests that I run with the ActivityInstrumentationTestCase2 class work without problems.

The following error message is displayed in the console:

 Test run failed: Instrumentation run failed due to 'java.lang.RuntimeException' 

I assume that it is hinting that getInstrumentation () cannot be successfully called. If so, how could I create a valid intent to launch MainActivity?

Code with ActivityUnitTestCase:

 public class MainActivityUnitTest extends android.test.ActivityUnitTestCase<MainActivity> { private MainActivity activity; public MainActivityUnitTest(String name) { super(MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); } @SmallTest public void testActivity() { Intent intent = new Intent(getInstrumentation().getTargetContext(), MainActivity.class); startActivity(intent, null, null); activity = getActivity(); assertNotNull(activity); } } 

Thank you for your help.

+4
source share
2 answers

The problem was the name parameter in the constructor. When uninstalling, it worked perfectly. :)

+2
source

I call setName () in the constructor and it works.
Try the following:

public MainActivityUnitTest (string name) {

 super(MainActivity.class); setName("MainActivity"); 

}

+1
source

Source: https://habr.com/ru/post/1383826/


All Articles