Вот мой основной класс и метод, который я пытаюсь проверить
public class MyClass {
public void startEmailActivity(FragmentActivity activity, @NotNull String emailUrl) {
if (isMyEmailAppInstalled()) {
Intent myEmailAppIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse(emailUrl));
myEmailAppIntent.setClassName(MY_PACKAGE_NAME, MY_EMAIL_COMPOSE_ACTIVITY_EMAIL);
activity.startActivity(intent);
}
}
А вот класс и метод тестирования.Предположим, что я смоделировал необходимые вызовы внутри метода isMyEmailAppInstalled (), так что он возвращает true
@RunWith(PowerMockRunner.class)
@PrepareForTest(Uri.class)
public class MyClassTest {
@Mock
FragmentActivity mockActivity;
@Mock
private Uri mockUri;
@Captor
private ArgumentCaptor<Intent> intentArgumentCaptor;
private static final String MOCK_EMAIL_URL = "mailto:mock@mock.com";
@Test
public void testStartEmailActivity() throws Exception {
doNothing().when(mockActivity).startActivity(any(Intent.class));
mockStatic(Uri.class);
when(Uri.parse(MOCK_EMAIL_URL)).thenReturn(mockUri);
MyClass testObject = new MyClass();
testObject.startEmailActivity(mockActivity, MOCK_EMAIL_URL);
intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mockActivity).startActivity(intentArgumentCaptor.capture());
Intent sentIntent = intentArgumentCaptor.getValue();
//sentIntent is null here :( Below lines of code throws NPE when test is run
Assert.assertTrue(sentIntent.getComponent().getClassName().equalsIgnoreCase(MY_EMAIL_COMPOSE_ACTIVITY_EMAIL));
Assert.assertTrue(sentIntent.getComponent().getPackageName().equalsIgnoreCase(MY_PACKAGE_NAME));
}
}
У кого-нибудь есть идея, почему аргумент captor вернул бы null?Это кажется простой вещью, может быть, я что-то упускаю.