私はリポジトリとデータソースを嘲笑し、setup()メソッドでオブジェクトを作成しました。これは私のテストクラスに新しいオブジェクトメソッドを保存している:私は「repository.getObjects」と呼ぶと、アサートが失敗したときAndroidでMockitoを使ってデータソースメソッドの問題をテストする
public class RepositoryTest {
@Mock
private Repository repository;
@Mock
private DataSource mockDatasource;
private Object object;
@Before
public void setUp() throws Exception {
mockDatasource = mock(DataSource.class);
repository = Repository.getInstance(mockDatasource);
object = new Object("Title", "Description", new ArrayList<SubObject>());
when(repository.getObject(anyString())).thenReturn(object);
when(repository.hasObject(any(Object.class))).thenReturn(true);
}
@Test
public void saveObject() throws Exception {
Object object = mock(Object.class);
List<SubObject> subobjects = new ArrayList<SubObject>();
subobjects(new SubObject("title1", "description1"));
subobjects(new SubObject("title2", "description2"));
object.setSubObjects(subobjects);
/*
* Instruct mockito to do nothing when datasource.saveSubObjects will be called.
*/
doNothing().when(mockDatasource).saveObject(object);
repository.saveObject(object);
verify(mockDatasource, times(1)).saveObject(object);
System.out.println("objects: " + repository.getObjects());
//verify(mockDatasource).getObject(object.getId());
assertTrue(repository.hasObject(object));
}
}
これが失敗し、私は、オブジェクトが表示されません。これがセーブかどうかはわかりません。 doNothing()メソッドを使うべきですか?私はアプリで手動でテストし、新しいオブジェクトを作成します。ちょうどMockitoを使って単体テストでこれを作ろうとしていて、私は立ち往生しています。 ORMを使用していますが、直接SQlite操作ではありません。私はこれについて二番目の意見が必要です。ありがとうございました。
これらのモックを設定する方法を教えてください。 – RadekJ
私のコードを更新しました –
'@ Mock'アノテーションを使いたい場合は、最初の行にsetUp' MockitoAnnotations.initMocks(this); 'を追加してください。そして、' repository'オブジェクトをmockitoまたはこの行にあなた自身で初期化されました 'repository = Repository.getInstance(mockDatasource);' – RadekJ