2012-11-04 19 views
6

miei FragmentActivity chiamate getActionBar() in onCreate():ActivityUnitTestCase getActionBar() restituisce null

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

Questo funziona bene quando si esegue l'applicazione normalmente sul emulatore o su un dispositivo. Tuttavia, quando provo l'attività con un ActivityUnitTestCase, getActionBar() restituisce sempre null.

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); 
    } 

Qualcuno sa perché getActionBar() restituisce null per i test unitari?

risposta

2

Fa parte del design. Hai provato a utilizzare ActivityInstrumentationTestCase2? Nessuna garanzia che funzioni, ma c'è una possibilità migliore. Il contesto disponibile in ActivityInstrumentationTestCase2 supporta più funzionalità.

Test delle unità reali in Android è difficile da fare. Soprattutto per le attività, dovresti permettere a te stesso di "ingannare" e fare invece test funzionali.

+0

Sono d'accordo con la tua affermazione che il test dell'unità non funziona davvero bene su Android. Voglio davvero controllare il contenuto del database dal test, quindi è possibile usare 'RenamingDelegatingContext' con' ActivityInstrumentationTestCase2'? – Nathan

Problemi correlati