在 Android 中使用 Mockito 测试数据源方法问题



我已经模拟了存储库和数据源,并在setup()方法中创建了一个对象。这是我在测试类中保存新对象的方法:

 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));
    }
}

这失败了,当我调用"repository.getObjects"并断言失败时,我看不到该对象。我不知道这是否称为保存。我应该使用 doNothing() 方法吗?我已经在应用程序中手动测试,它会创建新对象。只是试图使用 Mockito 从单元测试中做到这一点,我被卡住了。我使用的是ORM,而不是直接的SQlite操作。我需要对此的第二意见。谢谢。

如果您模拟了repository并且没有指定调用方法 hasObjects 时它应该返回的内容,并且如果返回类型为 bool,则默认情况下将返回false .

与其检查 mocekd 存储库是否有对象,不如检查它是否调用了负责保存此对象的方法。

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

相关内容

  • 没有找到相关文章

最新更新