5

द्वारा लॉन्च नहीं हो रही है, मैं परीक्षण गतिविधि में एक टुकड़े का परीक्षण करना चाहता हूं। मैंने AndroidManifest.xml फ़ाइल के साथ TestTragmentActivityandroidTest जोड़ा। लेकिन यह निम्नलिखित त्रुटि देता है जब मैं एक ActivityTestRule के माध्यम से इस गतिविधि का उपयोग करने का प्रयास करें:एंड्रॉइडटेस्ट में गतिविधि ActivityTestRule

java.lang.RuntimeException: Could not launch activity 
at android.support.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:371) 
at android.support.test.rule.ActivityTestRule.launchActivity(ActivityTestRule.java:219) 
at com.bbm.ui.fragments.StickerPackListFragmentTest.testEmpty(StickerPackListFragmentTest.java:29) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55) 
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270) 
at org.junit.rules.RunRules.evaluate(RunRules.java:20) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:27) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1887) 
Caused by: java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x14000000 cmp=com.bbm.debug/com.bbm.TestFragmentActivity } 
at android.app.Instrumentation.startActivitySync(Instrumentation.java:391) 
at android.support.test.runner.MonitoringInstrumentation.access$201(MonitoringInstrumentation.java:90) 
at android.support.test.runner.MonitoringInstrumentation$5.call(MonitoringInstrumentation.java:351) 
at android.support.test.runner.MonitoringInstrumentation$5.call(MonitoringInstrumentation.java:348) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:818) 

TestFragmentActivity सिर्फ एक खाली गतिविधि है। नीचे AndroidManifest.xmlandroidTest फ़ोल्डर में है।

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="com.bbm"> 

    <application 
     android:label="@string/app_name" 
     tools:replace="android:label"> 

     <activity android:name=".TestFragmentActivity"></activity> 

    </application> 
</manifest> 

मैंने यह क्यों हो रहा है के बारे में कुछ डेटा प्राप्त करने का प्रयास किया।

@RunWith(AndroidJUnit4.class) 
public class TestFragment { 

    @Rule 
    public ActivityTestRule<TestFragmentActivity> rule = 
      new ActivityTestRule<>(TestFragmentActivity.class, false, false); 


    @Test 
    public void testEmpty() { 
     // Just for logging purpose 
     printActivities(InstrumentationRegistry.getTargetContext(), "APP_TARGET_CONTEXT"); 
     printActivities(InstrumentationRegistry.getContext(), "APP_CONTEXT"); 

     // The launch fails.... 
     rule.launchActivity(null); 
    } 

    private void printActivities(Context context, String tag) { 
     try { 
      ActivityInfo[] infos = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES).activities; 
      for(ActivityInfo info : infos) { 
       Log.d(tag, info.name); 
      } 
     } catch (PackageManager.NameNotFoundException e) { 
      e.printStackTrace(); 
     } 
     Log.d(tag + "_PACKAGE_NAME", context.getPackageName()); 
    } 

} 

ऊपर के उत्पादन में है: नीचे अपने परीक्षण है

10-06 18:46:45.419 13030-13052/com.example.achhatra.myapplication D/APP_TARGET_CONTEXT: com.example.achhatra.myapplication.MainActivity 
10-06 18:46:45.419 13030-13052/com.example.achhatra.myapplication D/APP_TARGET_CONTEXT_PACKAGE_NAME: com.example.achhatra.myapplication 
10-06 18:46:45.419 13030-13052/com.example.achhatra.myapplication D/APP_CONTEXT: com.example.achhatra.myapplication.TestFragmentActivity 
10-06 18:46:45.419 13030-13052/com.example.achhatra.myapplication D/APP_CONTEXT_PACKAGE_NAME: com.example.achhatra.myapplication.test 

आप देख सकते हैं TestFragmentActivityandroidTest संदर्भ में और लक्ष्य संदर्भ में नहीं है। यही वजह है कि ActivityTestRule इसे लॉन्च करने में सक्षम नहीं है।

मैं जानना चाहता हूं कि मैं इस परीक्षण में TestFragmentActivity कैसे लॉन्च कर सकता हूं।

+0

क्या आपको अपनी समस्या का समाधान मिला है? मेरा ठीक यही मुद्दा है। – Hollerweger

+0

मैंने इस गतिविधि को स्वाद में जोड़ दिया। – Abdullah

उत्तर

0

यदि आप कस्टम Intent में गतिविधि को लॉन्च करने के लिए पास कर रहे हैं तो केवल launchActivity का उपयोग करें। अन्यथा सिर्फ इसलिए की तरह निर्माता में true का उपयोग करें:

@Rule 
    public ActivityTestRule<TestFragmentActivity> rule = 
      new ActivityTestRule<>(TestFragmentActivity.class, false, true); 

अन्यथा, आप कुछ इस तरह कर सकते हैं गतिविधि मानकों में पारित करने के लिए:

@RunWith(AndroidJUnit4.class) public class TestFragment { 

    @Rule 
    public ActivityTestRule<TestFragmentActivity> rule = 
      new ActivityTestRule<>(TestFragmentActivity.class, false, false); 

    private Activity launchedActivity; 

    @Before 
    public void setup() { 
     Intent intent = new Intent(Intent.ACTION_PICK); 
     intent.putExtra("parameter", "Value"); 
     launchedActivity = rule.launchActivity(intent); 
    } 
} 
+0

भले ही मैं 'लॉच एक्टिविटी' का उपयोग न करें और कन्स्ट्रक्टर में 'सत्य' पास करूं, फिर भी यह विफल हो जाता है। इसके अलावा मुझे गतिविधि में किसी भी पैरामीटर को पारित करने की आवश्यकता नहीं है। – Abdullah

1

ऐसा लगता है कि विभिन्न संकुल की है। त्रुटि com.bbm.TestFragmentActivity कहते हैं लेकिन अपने पैकेज प्रबंधक com.example.achhatra.myapplication.TestFragmentActivity

है मैं अपने पैकेज संरचना पता नहीं है तो मैं केवल अपने परीक्षण Android मेनिफेस्ट में अनुमान लगा सकते हैं ... परिवर्तन पैकेज com.example.achhatra.myapplication.test करने के लिए और इस पैकेज में अपने परीक्षण गतिविधि डाल दिया।

संबंधित मुद्दे