2016-03-20 6 views
6

私はdbとRobolectricにSugar ORMを使って単体テストを行っています。 RobolectricでSugar ORMを使用するには、thisの質問に従ってください。シュガーORMは、ユニットテスト中に毎回レコードを保存する必要がありますか?

私は以下のコードをstartEverTestSugarAppAsFirstメソッドに入れて実行します。

new PersonHandler(new Activity()).insertPeople(); 
Person p = Person.findById(Person.class, 1); 
System.out.println(p.getName()); 

最初のレコードの名前が印刷されます。ここまでは順調ですね。

しかし、もし私が//new PersonHandler(new Activity()).insertPeople();をコメントアウトして再度実行すると、レコードは返されず、NULLポインタの例外が与えられます。私は、シュガーORMは最初の実行時にどこかにレコードを格納し、私は2回目にこれらのレコードにアクセスできると思った。

一方、メインアクティビティののコードを以下のように配置すると、メソッドが作成され、2番目の実行で最初の行がコメントアウトされ、最初のレコードがログに出力されます。

new PersonHandler(this).insertPeople(); 
Person p = Person.findById(Person.class, 1); 
Log.v("person", p.getName()); 

したがって、ユニットテスト終了後、Sugar ORMはdbを削除しますか?またはどこにデータベースを保存するので、私はそれを何度も何度も使うことができますか?

答えて

1

SugarORMしかし、Robolectric。テストごとにテンポラリ・データベースを作成するので、それらの間に隠れた依存関係はありません。

これは、あなたのユニットテストが正常に彼らは私がデシベル= SQLiteDatabase.openOrCreateDatabase(filePathに、ヌル)でsqliteのDBを使用することができます

+0

を実行される順序に依存しないを実行する必要があり、良いことです。 robolectic unit testのコマンド。特定のdbパスでsugar ormを接続する方法はありますか? – orkan

+0

http://stackoverflow.com/questions/24225541/android-sugar-orm-with-existing-db-custom-file-path –

+0

私はこの投稿を知っています。しかし答えはエミュレータがアクセスできる/ data/data/...フォルダにローカルdbをコピーすることです。私は単体テストにローカルDBを使う必要があります。私はすでに/ data/data/...の場所にdbを持っているからです。しかし、ユニットテストの砂糖ormコードは、この場所を見てそれを使用していません。 – orkan

関連する問題