4

誰でも問題を解決できます:ormliteを使用するAndroidアプリをテストする方法は?

dao からモックを作成する方法を知りたいです。このコードは私にdaoを取得します

public Dao<Account, Integer> getAccountDao() throws SQLException {
    if (accountDao == null) {
        accountDao = getDao(Account.class);
    }
    return accountDao;
}

私のテスト アクティビティは次のようになります。

public class OrmActivity extends OrmLiteBaseActivity<DatabaseHelper> {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initUi();
        initUiListeners();

        RuntimeExceptionDao<Account, Integer> accountDao = getHelper().getAccountDataDao();
        Account account = new Account();
        account.setName("name");
        account.setPassword("password");
        accountDao.create(account);
    }

テスト用に別のデータベースを作成したくありません。私はモックを使いたいと思っています。

よろしくお願いします

4

2 に答える 2

4

他の誰かがこの投稿に出くわした場合に備えて。私が抱えていた問題は、アクティビティのインスタンスが必要であるため、コンテキストをOpenHelperManager.getHelper(android.content.Context context, Class openHelperClass)メソッドに渡すことができるということでした。

これを回避するために、コンテキストを提供する ActivityInstrumentationTestCase2 テスト クラスを作成します。MockContextを使用できますが、問題があることは理解しています。この方法は単純でばかげています:)

その時点で、Activity の機能をテストする必要はなく、データベースの機能だけをテストします。

public class TestActivity extends ActivityInstrumentationTestCase2<MainFragment> {

    public TestActivity() {
        super(MainFragment.class);
    }

    protected void setUp() throws Exception {
        super.setUp();
        //DatabaseHelper.class is the extended OrmLiteSqliteOpenHelper class
        OpenHelperManager.getHelper(getActivity(), DatabaseHelper.class);
    }

    protected void tearDown() throws Exception {
        OpenHelperManager.releaseHelper();
        super.tearDown();
    }

    public void testDetailDiscount() {
    //Example code using an entity class that encapsulates ormlite functionality 
        double total = 95 * 5;
        DocumentDetail detail = DocumentDetail.create(getActivity());
        assertEquals(total, detail.getTotal());
    }
}

それが役に立てば幸い

于 2012-09-26T07:15:55.707 に答える
3

Android アプリの単体テストには Robolectric を使用しています。RoboGuice と Ormlite で正常に動作します。Robolectric は独自のデータベースを作成するため、テスト対象のデバイスのデータベースが単体テストによって変更されることはありません。

これで質問の答えが得られない場合は、質問を明確にしてください。同様に、モックダオの使用に関連する別のデータベースを使用しないのはどうですか?

于 2012-04-21T18:37:27.363 に答える