2017-04-05 24 views
0

Sqliteのクエリ、更新、挿入などで実装されたカスタムContentProviderを作成しました。私のコードでは、このContentProviderを使用してデータを保存しました。 私はRobolectricを使って私のアプリをユニットテストしたいと思っています。 しかし、テストコードは以下のように失敗し、Robolectricを使用したContentProviderテスト

java.lang.NullPointerException 
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) 
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 
at com.podcast.rick.database.PodcastProvider.query(PodcastProvider.java:61) 
at org.robolectric.shadows.ShadowContentResolver.query(ShadowContentResolver.java:157) 
at android.content.ContentResolver.query(ContentResolver.java) 
at com.podcast.rick.rpodcast.RssReaderTest.parseRSS(RssReaderTest.java:61) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:487) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
at org.robolectric.internal.SandboxTestRunner$2.evaluate(SandboxTestRunner.java:209) 
at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:109) 
at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:36) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.robolectric.internal.SandboxTestRunner$1.evaluate(SandboxTestRunner.java:63) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
Robolectricシャドウクラスが最初に呼び出されていることがわかる

at org.robolectric.shadows.ShadowContentResolver.query(ShadowContentResolver.java:157) 
at android.content.ContentResolver.query(ContentResolver.java) 

けど呼ばついにアンドロイドコード、

android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) 
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 

私は思いますRobolectricユニットテストでは、Androidフレームワークコードの代わりにシャドウクラスを使用する必要がありますが、ここでなぜandroid.database.sqlite.SQLiteOpenHelperと呼ばれるのですか?

私のセットアップ方法は、以下の

@Before 
public void setUp() throws Exception { 
    PodcastProvider provider = new PodcastProvider(); 
    provider.onCreate(); 
    Robolectric.setupContentProvider(PodcastProvider.class); 
    ShadowContentResolver.registerProviderInternal("com.rick.podcast", provider); 
} 

それか、不足しているものに何か問題ありますか? 私はRobolectric 3.3.1を使用しています。

ありがとうございました。

+0

を使用してテストクラスを注釈を付けていることを確認します。 – greenapps

+0

そして、あなた自身が最初にその例外についてコメントしてください。 – greenapps

答えて

0

はあなたがあまりにも灰色のコードブロックでログを入れてください

@RunWith(RobolectricTestRunner.class) 
@Config(manifest = Config.NONE) 
public class YourTestClass { ... 
関連する問題