ActivityUnitTestCase getActionBar()返回null

Nat*_*han 6 java android unit-testing

我的FragmentActivity电话getActionBar()onCreate():

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

这通常在模拟器或设备上运行应用程序时工作正常.但是,当我用a测试Activity时ActivityUnitTestCase,getActionBar()总是返回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);
    }
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么getActionBar()单元测试返回null?

Joe*_*lin 2

这是设计的一部分。您是否尝试过使用 ActivityInstrumentationTestCase2 来代替?不能保证它会起作用,但有更好的机会。ActivityInstrumentationTestCase2 中可用的 Context 支持更多功能。

Android 中真正的单元测试很难进行。特别是对于活动,您应该允许自己“作弊”并进行功能测试。