简体   繁体   English

ActivityUnitTestCase getActionBar()返回null

[英]ActivityUnitTestCase getActionBar() returns null

My FragmentActivity calls getActionBar() in onCreate() : 我的FragmentActivityonCreate()调用getActionBar() onCreate()

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

This works fine when running the app normally on the emulator or on a device. 在模拟器或设备上正常运行应用程序时,此方法可以正常工作。 However, when I test the Activity with a ActivityUnitTestCase , getActionBar() always returns null. 但是,当我使用ActivityUnitTestCase测试ActivityUnitTestCasegetActionBar()始终返回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);
    }

Does anyone know why getActionBar() returns null for unit tests? 有谁知道为什么getActionBar()对于单元测试返回null?

It's part of the design. 这是设计的一部分。 Have you tried using ActivityInstrumentationTestCase2 instead? 您是否尝试过使用ActivityInstrumentationTestCase2代替? No guarantee that it will work, but there's a better chance. 无法保证它会工作,但是有更好的机会。 The Context that's available to you in ActivityInstrumentationTestCase2 supports more features. ActivityInstrumentationTestCase2中提供给您的上下文支持更多功能。

Real unit testing in Android is hard to do. 很难在Android中进行真实的单元测试。 Especially for Activities, you should allow yourself to "cheat" and do functional testing instead. 特别是对于活动,您应该允许自己“作弊”并进行功能测试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM