2012-11-04 20 views
6

Moi FragmentActivity połączeń getActionBar() w onCreate():ActivityUnitTestCase getActionBar() zwraca NULL

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

Działa to dobrze podczas uruchamiania aplikacji normalnie na emulatorze lub na urządzeniu. Jednak gdy testuję działanie z wartością ActivityUnitTestCase, getActionBar(), zawsze zwracana jest wartość 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); 
    } 

Czy ktoś wie, dlaczego getActionBar() zwraca zero dla testów jednostkowych?

Odpowiedz

2

Jest to część projektu. Czy próbowałeś używać ActivityInstrumentationTestCase2? Nie ma gwarancji, że zadziała, ale jest większa szansa. Kontekst, który jest dostępny dla ciebie w ActivityInstrumentationTestCase2 obsługuje więcej funkcji.

Testowanie prawdziwych jednostek w systemie Android jest trudne. Specjalnie dla działań, powinieneś pozwolić sobie na "oszukiwanie" i zamiast tego wykonywać testowanie funkcjonalne.

+0

Zgadzam się ze stwierdzeniem, że testowanie jednostkowe nie działa dobrze w systemie Android. Naprawdę chcę kontrolować zawartość bazy danych z testu, więc czy można użyć 'RenamingDelegatingContext' z' ActivityInstrumentationTestCase2'? – Nathan

Powiązane problemy