代码之家  ›  专栏  ›  技术社区  ›  KellyTheDev

在同一测试中模拟悬而未决的实例和静态

  •  1
  • KellyTheDev  · 技术社区  · 7 年前

    我似乎无法理解这一点。我明白了 java.lang.IncompatibleClassChangeError: Implementing class

    我试图找出如何发送一个挂起的意图,通过将其推送到类中进行组织。目前我有以下几点:

    @RunWith(PowerMockRunner.class)
    @PrepareForTest(PendingIntent.class)
    public class TheTests{
        private Context _context;
        private AlarmManager _alarmManager;
        private Manager _manager;
    
        @Before
        public void setup() {
            _alarmManager = Mockito.mock(AlarmManager.class);
            _context = Mockito.mock(Context.class);
            Mockito.when(_context.getSystemService(anyString())).thenReturn(_alarmManager);
            _manager = new Manager(_context);
        }
    
        @Test
        public void example() {
            PendingIntent expected = PowerMockito.mock(PendingIntent.class);
    
            PowerMockito
                    .when(PendingIntent.getBroadcast(any(Context.class), anyInt(), any(Intent.class), anyInt()))
                    .thenReturn(expected);
    
            _manager.broadcast(_cal, new Schedule());
        }
    }
    
    public Manager class {
        public void broadcast(Thing thing) {
            if (thing == null) {
                return;
            }
    
            Intent sender = new Intent("broadcast.AlarmReceiverFilter");
            PendingIntent pendingIntent = PendingIntent.getBroadcast(_context, 0, sender, PendingIntent.FLAG_CANCEL_CURRENT);
            _alarm.set(AlarmManager.RTC_WAKEUP, 0, pendingIntent);
        }
    }
    

    在这一切之后,我不知道如何让他们都打得很好。我的目标是验证 getBroadcast 同样 Intent 它本身

    凯莉

    更新:下面的讨论建议避免使用powermock,因此我尝试了以下方法:

    @Test
    public void example2() {
        ShadowApplication shadowApp = shadowOf(RuntimeEnvironment.application);
    
        _manager = new TimeManager(shadowApp.getApplicationContext());
        _manager.broadcast(new Thing());
    
        List<Intent> intents = shadowApp.getBroadcastIntents();
        assertEquals(intents.size(), 1); // actual size is 0 (zero)
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Eugen Martynov    7 年前

    我不会使用 PowerMock 在这里

    只需使用:

    ShadowApplication shadowApp = shadowOf(RuntimeEnvironment.application);
    List<Intent> intents = shadowApp.getBroadcastIntents();
    

    然后在那里找到你的意图。

    UPD。对不起,我没注意到你嘲笑我 AlarmManager . 您不应该这样做并使用:

    AlarmManager alarmManager = (AlarmManager)RuntimeEnvironment.application.getSystemService(Context.ALARM_SERVICE);
    ShadowAlarmManager shadowAlarmManager = shadowOf(alarmManager);
    List<ShadowAlarmManager.ScheduledAlarm> alarms = shadowAlarmManager.getScheduledAlarms();