レルムを使用するプロジェクトの単体テストを試みています。私は自分のコードをテストするためにレルムメソッドをスタブし、RealmQueryに問題があることを発見しました。オブジェクトが(1)レルム・データベースに追加されているかどうかをテストしたい。 (2)を取り出すことができる。 (3)そのオブジェクトのset属性が私が期待しているものと一致するかどうか。ここに私のsetup()とTestの部分があります。私は、セットアップ中にレルム(機能の追加)(へのコピーをスタブ方法Mockito/Realm(when-then):メソッドからそのサブメソッドへの引数の受け渡し方法
私はセットアップでレルムデータベースを(someListがグローバル&一覧<です>)(スタブ方法)
SomeRealmObject some1;
some1.setId(1);
some1.setName("some1");
SomeRealmObject some2;
some2.setId(2);
some2.setName("some2");
someList = new ArrayList<SomeRealmObject>();
someList.add(some1);
someList.add(some2);
)
when(mockRealm.copyToRealm).then(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
SomeRealmObject some = (SomeRealmObject) args[0];
userList.add(user);
return user;
}
});
セットアップ()でRealmQuery(検索機能)をスタブする方法
P荒れ果てがここから始まります。チェーンの次のメソッドに引数を渡すには、realmQuery.equalsTo(...)が必要です。 findFirst()とfindAll()の2つのメソッドをテストする必要があるので、必要だと思いますが、間違っている可能性があります。 すべてのアイデア? Iユニットは、私のcreateSomeObject(例えばcreateAccount)をテストどのようにセットアップでのFindFirstを()スタブ方法
()
Answer findFirstAnswer = new Answer(){
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
String key = args[0].toString(); //Let's just use an Id search for
int id = (int) args[1]; //an example.
for(int count = 0; someList.get(count) != null; count++){
if(someList.get(count).getId == id){
return someList.get(count);
}
return null; //test will fail, someRealmObject not found
}
}
@Test
public void create_someObj_test() {
String expectedReturnedName = "someName";
String actualReturnedName;
SomeRepositoryImpl manager; //Class with business logic (mvp pattern)
SomeRepositoryImpl.initialize();
manager = someRepositoryImpl.getInstance();
SomeRealmObject some = new SomeRealmObject();
some.setID(6);
some.setName(expectedReturnedName);
//mock adding user to realm, should actually add it to a list
mockRealm.beginTransaction();
mockRealm.copyToRealm(some);
mockRealm.commitTransaction();
actualReturnedName = mockRealm.where(SomeRealmObject.class).equalTo("id", some.getId()).findFirst().getName().toString();
//PASS if object exists and name matches
//FAIL if name does not match
//FAIL if nullPointerException because no match/object not found
assertEquals(expectedReturnedName, actualReturnedName);
}
アイデアがあるかどうかは知りたいですが、ID検索にint値を割り当てるためのグローバル変数を作成したばかりです。私はその後、equalTo()の答えでIDを取得します。 –
使用しているレルムのバージョンは言及していません。しかし、バージョン2.2.2では、Mockitoユーザーを支援するために、主要なクラスを非最終的に変更しました。 – geisshirt
私は、最新のレルムバージョンを使用しています。どのように役立つだろうか?私はユニットテストを開始したので、私はmockitoを初めて使っています。 @geisshirt –