【发布时间】:2018-04-24 10:05:17
【问题描述】:
我正在学习如何编写单元测试,但遇到了一些问题。
基本上,我的方法是根据系统时钟设置闹钟,所以在测试中我想模拟 System 类。我试过this answer 说。所以这是我的测试:
@RunWith(PowerMockRunner.class)
public class ApplicationBackgroundUtilsTest {
@Mock
private Context context;
@Mock
private AlarmManager alarmManager;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void registerAlarmManagerTest() {
PowerMockito.mockStatic(System.class);
when(context.getSystemService(Context.ALARM_SERVICE)).thenReturn(alarmManager);
BDDMockito.given(System.currentTimeMillis()).willReturn(0L);
ApplicationBackgroundUtils.getInstance().registerAlarmManager(context);
verify(alarmManager, times(1)).set(eq(AlarmManager.RTC_WAKEUP), eq(120L), any(PendingIntent.class));
}
因此,使用此代码,我希望 System.currentTimeMillis() 始终返回 0,但我得到了这个:
Comparison Failure:
Expected :alarmManager.set(0, 120, <any>);
Actual :alarmManager.set(0, 1524564129683, null);
所以我猜对 System 的嘲笑是行不通的。
我该怎么做?
【问题讨论】:
-
你可能会喜欢我对this question的回答
标签: java android unit-testing mockito powermock