【问题标题】:ActivityUnitTestCase getActionBar() returns nullActivityUnitTestCase getActionBar() 返回 null
【发布时间】:2012-11-04 12:37:09
【问题描述】:

我的FragmentActivityonCreate() 中调用getActionBar()

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

在模拟器或设备上正常运行应用程序时,这可以正常工作。但是,当我使用 ActivityUnitTestCase 测试 Activity 时,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);
    }

有人知道为什么getActionBar() 在单元测试中返回 null 吗?

【问题讨论】:

    标签: java android unit-testing


    【解决方案1】:

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

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

    【讨论】:

    • 我同意你的说法,即单元测试在 Android 中并不能很好地工作。我真的很想从测试中控制数据库内容,那么RenamingDelegatingContextActivityInstrumentationTestCase2可以一起使用吗?
    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多