Android - MockitoJUnitRunner - 光标 getCount 总是返回 0

标签 android unit-testing mockito

我尝试在 Mockito 的单元测试中使用游标,但 getCount() 方法始终返回 0,即使我添加了一行。有人可以帮助我吗?

final Cursor cursor = new MatrixCursor(new String[]{"ID", "name", "data"});
((MatrixCursor) cursor).addRow(new Object[]{1, "myName", "myData"});

最佳答案

“标准”Mockito 模拟功能允许记录模拟对象的行为。
您编写的内容看起来像 Mockito spy (您模拟了被测对象的一部分)并且应该仅在遗留上下文中使用(因为您别无选择)。

在您的情况下,假设您为 MyClassToTest 类的 boolean foo() 方法编写单元测试,该类依赖于 Cursor 对象并且您希望模拟getCount() 调用以测试可能的用例。

假设您有两个案例要测试:

  • foo() 返回 true 作为 Cursor.getCount() 返回 0 的情况
  • foo() 返回 false 的情况,因为 Cursor.getCount() 返回 1 或更多。

你可以这样写:

@Mock
Cursor cursor;

@Test
public void add_return_true_if_no_element(){
      Mock.when(cursor.getCount()).thenReturn(0);
      Assert.assertTrue(new MyClassToTest().foo(cursor))
}

@Test
public void add_return_false_if_at_least_one_element(){
      Mock.when(cursor.getCount()).thenReturn(1);
      Assert.assertFalse(new MyClassToTest().foo(cursor))
}

关于Android - MockitoJUnitRunner - 光标 getCount 总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48251018/

相关文章:

java - 从我的 android 应用程序打开 youtube 应用程序。如何传递id?

android - 未指定 buildToolsVersion

java - 如何测试 EJB 中的异常

java - 如何对将文件作为参数的方法进行单元测试和模拟

java - 不使用 InjectMocks 创建对象会导致 httpClient 出现问题

java - 在 Kotlin 中打开 getter 以将其与 Mockito 一起使用 - MissingMethodInvocationException

Android:检测软键盘打开

android - 如何从多个 Parse.com 表/类中检索数据

c# - ToArray 似乎无法使用 Moq 的 Verify 方法

java - Mockito - 拦截模拟上的任何方法调用