2017-05-06 19 views
1

テストで使用するgreenDAOデータベースセッションオブジェクトを作成しようとしています。 SQLiteDatabaseオブジェクトを取得しようとすると、常にnullが返されます。 エラーは返されず、理由がわかりません。コードの下junitテスト用のgreenDAOセッションオブジェクトの設定

@RunWith(MockitoJUnitRunner.class) 
public class ChatRoomModuleTest { 

    SomeEntityDao someEntityDao; 

    @Mock 
    Context mMockContext; 

    @Rule 
    public MockitoRule mockitoRule = MockitoJUnit.rule(); 

    @Before 
    public void Before(){ 

     DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(mMockContext, "myapp-db", null); 
     SQLiteDatabase db = openHelper.getWritableDatabase(); //always return null; 
     DaoSession daoSession = new DaoMaster(db).newSession(); 
     someEntityDao = daoSession.getSomeEntityDao(); 

    } 
} 

注:私はアンドロイドのテストを使用してテストすることができます知っているが、彼らははるかに遅いと独立したプラットフォームのロジックをテストする必要があります。

+0

ユニットテストかインテグレーションテストですか? –

+0

中間層クラス – ByteArtisan

+0

をテストすることになっています。コンテキストをモックします。 DevOpneHelperに渡す前に最初に設定してください。 –

答えて

0

解決策を見つけたし、いくつかのステップが含ま:

1)app.gradle追加でアプリケーション

を作成できるようにRobolectricパッケージを使用します。

//if your project use multidex 
testCompile "org.robolectric:shadows-multidex:3.0" 
//otherwise use 
//testCompile 'org.robolectric:robolectric:3.1' 

2)あなたのテストを構築このようなクラス:

@RunWith(RobolectricGradleTestRunner.class) //run test with roboteletric 
@Config(constants = BuildConfig.class, sdk = 19) 
public class test { 

    MyEntityDao myEntityDao; 
    DaoSession daoSession; 

    @Before 
    public void setUp() { 

//use roboteletric to create a valid Application Object 
     DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(RuntimeEnvironment.application, null, null); 
     SQLiteDatabase db = openHelper.getWritableDatabase(); 
     Assert.assertNotNull(db); 
     daoSession = new DaoMaster(db).newSession(); 
     myEntityDao = daoSession.getMyEntityDao(); 
    } 


    @Test 
    public void t1() { 
     MyEntity myEntity = new MyEntity(); 
     myEntityDao.insert(MyEntity); 
    } 
} 

3)最後に、投稿された作業ディレクトリを定義しますテスト用にhereを入力すると、Robolectricはプロジェクトマニフェストファイルを見つけることができます。

この時点で他のテストでも一貫して動作するかどうかは不明ですが、代わりにアンドロイドテストを使用することをお勧めします。 GreenDaoはAndroidの外で使用するようには調整されていないようです。

関連する問題