Тестирование взаимодействия с SpeechRecognizer с помощью Espresso-Intents - PullRequest
0 голосов
/ 24 сентября 2018

Я добавляю инструментальное тестирование в приложение.Я хочу проверить взаимодействие вокруг распознавания речи:

  • пользователь нажимает кнопку (R.id.buttonVoice), отображая DialogFragment для распознавания речи
  • удары SpeechRecognizer-in, при прослушивании пользовательского ввода
  • частичные результаты отображаются в диалоговом окне (пока это не проверяется)
  • после завершения диалоговое окно закрывается, и распознанная речь отображается в активности TextView (R.id.results)

Тестирование инструментов с помощью Espresso-Intents звучит как хороший способ убедиться, что мой тест не основан на SpeechRecognizer. * 1021 системы.*

Вот мой тест, который воспроизводит то же взаимодействие с intended() заданным намерением :

@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityWithPermissionTest {

    @Rule
    public IntentsTestRule intentsTestRule = new IntentsTestRule<>(MainActivity.class);

    @Test
    public void clickInput_sendsSpeakIntentAndDisplaysResults() {
        // stub intent returning recognition results
        intending(hasAction(equalTo(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)))
                .respondWith(new ActivityResult(Activity.RESULT_OK, new Intent().putExtra(
                        SpeechRecognizer.RESULTS_RECOGNITION, new String[]{"I am uttering."})));

        // when clicking on the buttonVoice, thus opening the dialog and starting the speechRecognizer
        onView(withId(R.id.buttonVoice))
                .perform(click());

        // expect the recognition results to be displayed
        onView(withId(R.id.results))
                .check(matches(withText("I am uttering.")));
    }
}

Однако этот тест завершается ошибкой 'with text: is "I am uttering."' doesn't match the selected view.

Действительно, когда я смотрю на инструментарий, происходящий на устройстве, я вижу, что real SpeechRecognizer запускается (и не работает, поскольку он работает на эмуляторе).Таким образом, кажется, что моя цель заглушки не работает.

Почему я не могу заглушить RecognizerIntent?Есть ли другой способ протестировать взаимодействие с SpeechRecognizer, не полагаясь на реальное распознавание речи?

...