6

私のFragmentActivity電話getActionBar()番号onCreate():

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

これは、エミュレーターまたはデバイスでアプリを正常に実行している場合に正常に機能します。ただし、アクティビティを でテストすると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);
    }

getActionBar()単体テストで null を返す理由を知っている人はいますか?

4

1 に答える 1

2

デザインの一部です。代わりに ActivityInstrumentationTestCase2 を使用してみましたか? うまくいく保証はありませんが、可能性は高くなります。ActivityInstrumentationTestCase2 で利用できる Context は、より多くの機能をサポートしています。

Android で実際の単体テストを行うのは困難です。特にアクティビティの場合は、代わりに「チート」して機能テストを行うことを許可する必要があります。

于 2012-11-04T19:07:28.547 に答える