Как вы определили
notificationManager
Используя MockitoAnnotations, вы можете определить поле следующим образом в своем тесте
@Mock
NotificationManager notificationManager
@Before
public void setup()
{
MockitoAnnotations.init(this);
}
ПРИМЕЧАНИЕ: чтобы шпионить за классомэто должен быть или фиктивный, или настоящий объект, за которым следили.т.е.
val notificationManagerSpy: spy(notificationManager)
Если вы используете тестовый фреймворк, такой как Robolectric , у вас будет real ShadowNotificationManager , поэтому вы должны шпионить зареальный объект.Решение будет следующим:
@RequiresApi(Build.VERSION_CODES.O)
@Test
@Throws(Exception::class)
fun clearNotificationsTest()
{
val notificationManagerSpy: spy(notificationManager)
Mockito.`when`(mockContext.getSystemService(Context.NOTIFICATION_SERVICE))
.thenReturn(notificationManagerSpy)
val captor: ArgumentCaptor<NotificationChannel> =
ArgumentCaptor.forClass(NotificationChannel::class.java)
mockContext.registerNotificationChannels()
Mockito.verify(notificationManagerSpy
.createNotificationChannel(captor.capture()))
val argument: NotificationChannel = captor.value
assertThat(argument.id, equalTo(CHANNEL_ID))
assertThat(argument.name.toString(), equalTo(CHANNEL_NAME))
assertThat(argument.importance,
equalTo(NotificationManagerCompat.IMPORTANCE_HIGH))
см. https://www.baeldung.com/mockito-spy для получения дополнительной информации о шпионаже и о том, что является допустимым шпионским объектом.