2012-11-04 29 views
6

My FragmentActivity cuộc gọi getActionBar() trong onCreate():ActivityUnitTestCase getActionBar() trả về null

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

này hoạt động tốt khi chạy ứng dụng bình thường trên giả lập hoặc trên một thiết bị. Tuy nhiên, khi tôi kiểm tra Hoạt động với một số ActivityUnitTestCase, getActionBar() luôn trả về giá trị rỗng.

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

Có ai biết tại sao getActionBar() trả về null cho kiểm tra đơn vị?

Trả lời

2

Đó là một phần của thiết kế. Bạn đã thử sử dụng ActivityInstrumentationTestCase2 chưa? Không đảm bảo rằng nó sẽ làm việc, nhưng có một cơ hội tốt hơn. Bối cảnh có sẵn cho bạn trong ActivityInstrumentationTestCase2 hỗ trợ nhiều tính năng hơn.

Thử nghiệm đơn vị thực trong Android thật khó thực hiện. Đặc biệt đối với Hoạt động, bạn nên cho phép bản thân "lừa gạt" và thực hiện kiểm tra chức năng thay thế.

+0

Tôi đồng ý với tuyên bố của bạn rằng kiểm tra đơn vị không thực sự hoạt động tốt trong Android. Tôi thực sự muốn kiểm soát nội dung cơ sở dữ liệu từ thử nghiệm, vì vậy có thể sử dụng 'RenamingDelegatingContext' với' ActivityInstrumentationTestCase2' không? – Nathan