我已经在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);
}