2017-01-31 6 views
0

私はリポジトリとデータソースを嘲笑し、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操作ではありません。私はこれについて二番目の意見が必要です。ありがとうございました。

+0

これらのモックを設定する方法を教えてください。 – RadekJ

+0

私のコードを更新しました –

+0

'@ Mock'アノテーションを使いたい場合は、最初の行にsetUp' MockitoAnnotations.initMocks(this); 'を追加してください。そして、' repository'オブジェクトをmockitoまたはこの行にあなた自身で初期化されました 'repository = Repository.getInstance(mockDatasource);' – RadekJ

答えて

0

repositoryを嘲笑し、メソッドhasObjectsが呼び出されたときに何を返すべきかを指定しなかった場合、戻り値の型がboolの場合、デフォルトではfalseが返されます。

mocekdリポジトリhasObjectをチェックする代わりに、このオブジェクトを保存するメソッドを呼び出したかどうかを確認する必要があります。

public class Test { 
    public boolean testMethod() { 
     return true; 
    } 
} 

.... 

Test mocekdTest = Mockito.mock(Test.class); 
boolean b = mocekdTest.testMethod(); 
//b==false <-becouse by default mocked methods return false or null 
関連する問題