【发布时间】:2016-12-15 20:25:22
【问题描述】:
我正在尝试对使用 JUnit4 和 Mockito 侦听“com.android.music.metachanged”意图的广播接收器进行单元测试。
广播接收器在收到意图时启动服务。我想断言该服务已启动。我还想断言接收到的意图的额外“艺术家”字符串与发送的意图相同。
这就是我目前所拥有的......
@RunWith(PowerMockRunner.class)
public class MusicBroadcastReceiverUnitTest {
private MusicBroadcastReceiver mReceiver;
@Mock
private Context mContext;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mReceiver = new MusicBroadcastReceiver();
}
@Test
public void testStartMusicRegistrationService() {
Intent intent = new Intent("com.android.music.metachanged");
intent.putExtra("artist", "SampleArtist");
mReceiver.onReceive(mContext, intent);
assertNull(mReceiver.getResultData());
ArgumentCaptor<Intent> argument = ArgumentCaptor.forClass(Intent.class);
verify(mContext, times(1)).startService(argument.capture());
Intent receivedIntent = argument.getValue();
assertEquals("SampleArtist", receivedIntent.getStringExtra("artist"));
}
}
但这会触发 java.lang.RuntimeException: Method putExtra in android.content.Intent not mocked。
我检查了this,但我认为 OP 有不同的问题,因为他们没有从测试体内发出意图。
【问题讨论】:
-
虽然不是 ContentValues 的问题,但这是这个问题的欺骗:stackoverflow.com/q/36555136/1426891
标签: android android-intent junit mocking mockito