2012-11-04 12 views
6

मेरे FragmentActivity कॉल getActionBar()onCreate() में:ActivityUnitTestCase getActionBar() रिटर्न अशक्त

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new_expense); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
} 

यह ठीक काम करता है जब एमुलेटर पर या एक डिवाइस पर सामान्य रूप से अनुप्रयोग चल रहा है। हालांकि, जब मैं ActivityUnitTestCase के साथ गतिविधि का परीक्षण करता हूं, getActionBar() हमेशा शून्य देता है।

public class NewTransactionTest extends ActivityUnitTestCase<TransactionEditActivity> { 

    private RenamingDelegatingContext myContext; 
    private DatabaseHelper myHelper; 
    private RuntimeExceptionDao<Account,Long> myDao; 
    private Account myBankAccount1; 
    private Account myBankAccount2; 
    private Account myCategory1; 
    private Account myCategory2; 
    private Budget myBudget; 

    public NewTransactionTest() { 
     super(TransactionEditActivity.class); 
    } 

    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 

     myContext = new RenamingDelegatingContext(getInstrumentation().getTargetContext(), "test"); 
     myContext.deleteDatabase(DatabaseHelper.DATABASE_NAME); 
    } 

    @UiThreadTest 
    public void testPreConditions() throws Throwable { 
     setActivityContext(myContext); 
     final TransactionEditActivity activity = startActivity(new Intent(), null, null); 
    } 

क्या किसी को पता है कि क्यों getActionBar() रिटर्न इकाई परीक्षण के लिए शून्य?

उत्तर

2

यह डिज़ाइन का हिस्सा है। क्या आपने इसके बजाय ActivityInstrumentationTestCase2 का उपयोग करने का प्रयास किया है? कोई गारंटी नहीं है कि यह काम करेगा, लेकिन एक बेहतर मौका है। ActivityInstrumentationTestCase2 में आपके लिए उपलब्ध संदर्भ अधिक सुविधाओं का समर्थन करता है।

एंड्रॉइड में वास्तविक इकाई परीक्षण करना मुश्किल है। विशेष रूप से गतिविधियों के लिए, आपको खुद को "धोखा" करने और इसके बजाय कार्यात्मक परीक्षण करने की अनुमति देनी चाहिए।

+0

मैं आपके बयान से सहमत हूं कि यूनिट परीक्षण वास्तव में एंड्रॉइड में अच्छा काम नहीं करता है। मैं वास्तव में परीक्षण से डेटाबेस सामग्री को नियंत्रित करना चाहता हूं, इसलिए 'ActivityInstrumentationTestCase2' के साथ 'RenamingDelegatingContext' का उपयोग करना संभव है? – Nathan

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