2016-03-08 9 views
15

मैं यह कहना चाहता हूं कि मेरी Acitivty जो कि मैं वर्तमान में परीक्षण कर रहा हूं, कुछ क्रियाएं पूरी होने पर समाप्त हो जाती हैं। दुर्भाग्य से अब तक मैं परीक्षण के अंत में कुछ नींद जोड़कर जोर दे रहा हूं। क्या कोई बेहतर तरीका है ?एस्प्रेसो अगर गतिविधि समाप्त हो जाती है तो परीक्षण कैसे करें?

import android.content.Context; 
import android.os.Build; 
import android.support.test.rule.ActivityTestRule; 
import android.test.suitebuilder.annotation.LargeTest; 

import org.junit.Before; 
import org.junit.Rule; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.JUnit4; 

import static org.junit.Assert.assertTrue; 

@SuppressWarnings("unchecked") 
@RunWith(JUnit4.class) 
@LargeTest 
public class MyActivityTest { 

    Context context; 

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

    @Before 
    public void setup() { 
     super.setup(); 
     // ... 
    } 

    @Test 
    public void finishAfterSomethingIsPerformed() throws Exception { 

     activityRule.launchActivity(MyActivity.createIntent(context)); 

     doSomeTesting(); 

     activityRule.getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       fireEventThatResultsInTheActivityToFinishItself(); 
      } 
     }); 

     Thread.sleep(2000); // this is needed :(

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      assertTrue(activityRule.getActivity().isDestroyed()); 
     } 

    } 

} 

उत्तर

0

आप नीचे दिए गए StartActivityForResult नमूना का उपयोग कर सकते हैं, लिंक में अधिक विवरण।

कैसे FirstActivity की गतिविधि शुरू करने के लिए:

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 1); 

कैसे (परिणाम भेजे बिना) वापस पहले करने के लिए जाने के लिए अपने SecondActivity खत्म करने के लिए है कि:

Intent returnIntent = new Intent(); 
setResult(Activity.RESULT_CANCELED, returnIntent); 
finish(); 

जब SecondActivity समाप्त हो गया है कैसे घटना उठाएँ करने के लिए (फर्स्टएक्टिविटी में लिखा गया है):

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 

    } 
}//onActivityResult 

अधिक आप यहां देख सकते हैं: http://developer.android.com/training/basics/intents/result.html और वहां How to manage `startActivityForResult` on Android? यह भी है कि आप दूसरे डेटा से प्राप्त डेटा को कैसे भेज सकते हैं।

+0

धन्यवाद। मुझे लगता है कि मैं पर्याप्त स्पष्ट नहीं था। मेरी समस्या यह है कि मेरे पास दूसरी गतिविधि या पहली गतिविधि नहीं है। मेरे पास केवल एक गतिविधि है। तो मैं केवल आपके समाधान का उपयोग कर सकता हूं अगर मैं अपनी सक्रियता शुरू करने में सक्षम होने के लिए एक डमी पहली गतिविधि शुरू करता हूं जिसे मैं वहां से परीक्षण करना चाहता हूं .. – IHeartAndroid

+0

तो आपके पास अपना रननेबल है और इसे समाप्त होने के बाद कुछ करना चाहता है? –

+0

मैं यह सुनिश्चित करना चाहता हूं कि मेरी गतिविधि fireEventThatResultsInThectivityToFinishItself() के बाद बंद हो गई है; – IHeartAndroid

28

मेरे मामले में मैं isFinishing() के लिए परीक्षण कर सकते हैं:

assertTrue(activityTestRule.getActivity().isFinishing());

के बजाय:

Thread.sleep(2000); // this is needed :(

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     assertTrue(activityRule.getActivity().isDestroyed()); 
    } 

isFinishing() का एक और लाभ यह है कि आप संस्करण की जांच की जरूरत नहीं है, है।

+0

कहा जाता है, निश्चित रूप से 'isFinishing()' का उपयोग करना अच्छा है, लेकिन आप इस सवाल के मुख्य बिंदु को संबोधित नहीं कर रहे हैं कि नींद के आसपास कैसे काम करना है। –

+0

मेरी समझ में ओपी जोर देने के लिए एक बेहतर तरीका मांग रहा था, इसलिए वह 'Thread.sleep' से बच सकता है। – keineantwort

+1

मैंने देखा है कि आप अपने कोड का परीक्षण करने के बाद 'Thread.sleep()' से बच सकते हैं। हालांकि आप इसका उल्लेख करना भूल गए हैं, इसलिए मैंने बिंदु को और स्पष्ट करने के लिए आपका उत्तर संपादित किया। –

0

सुनिश्चित नहीं हैं कि अगर इसकी एक अच्छा अभ्यास है, लेकिन यह मेरे लिए काम किया: आपकी प्रतिक्रिया के लिए

assertTrue(mTestRule.getActivity() == null); 
संबंधित मुद्दे