Mockito - mock builder 即使使用 returns_self也会返回一个空对象



我已经在Android中为通知创建了一个测试,并且正在努力制作Mock对象。当我尝试在这篇文章之后模拟notificationBuilder(建议将 Android 通知包装在自定义类中)时,我得到一个空notificationBuilder,然后破坏了我的测试。

显示这一点的最小代码是:

@Before
public void setUp() {
    NotificationCompat.Builder notificationBuilder = Mockito.mock(NotificationCompat.Builder.class, Mockito.RETURNS_SELF);
}

其中通知生成器为空。如何获取 Mock NotificationCompat.Builder 作为返回值?我认为这是RETURNS_SELF应该做的。

对于空值,我不能将我的生成器用作 when().then() 的一部分进行进一步测试。

问题是你正在创建一个模拟,它最终是 @Before 方法中的一个局部变量。

当你稍后运行测试时,这个变量不再可访问,也没有任何类的全局模拟的概念(至少在原版 Mockito 中)。

因此,要么使用全局变量,然后在 setUp 方法中手动初始化该变量:

private NotificationCompat.Builder notificationBuilder;
@Before
public void setUp() {
   notificationBuilder = Mockito.mock(NotificationCompat.Builder.class);
}

或使用 Mockito 注释:

@Mock
private NotificationCompat.Builder notificationBuilder;
@Before
public void setUp() {
   MockitoAnnotations.initMocks(this);
}

Mockito.mock(...)返回null,因为你没有嘲笑任何东西。您需要声明一个带有@Mock注释的全局变量,并在 setUp() 方法中初始化您的 mock 对象(只要它上面有@Before注释,您就可以调用它。请尝试以下代码片段。

    @Mock
    NotificationCompat.Builder notificationBuilder;
    @Before
    public void setUp(){
        notificationBuilder = Mockito.mock(NotificationCompat.Builder
                .class);
    }
   @Test
    public void testSharedPrefInjection(){
        assertNotNull(notificationBuilder);
    }

相关内容

  • 没有找到相关文章