#android #android-espresso #firebase-test-lab
#Android #android-espresso #firebase-test-lab
Вопрос:
У меня есть вспомогательный класс для создания скриншотов при использовании Espresso. Скриншоты создаются с помощью Firebase ScreenShotter. Мой код выглядит следующим образом:
private static ActivityScenario activityScenario;
public static void setup(){
activityScenario = ActivityScenario.launch(MainActivity.class);
}
public static void screenshot(String name){
activityScenario.onActivity(activity->{
ScreenShotter.takeScreenshot(name, activity /* activity */);
});
}
Итак, другой класс назвал бы это так:
@Before
public void setup(){
SetupHelper.setup();
}
@Test
public void loginAfterReset() {
SetupHelper.screenshot("Home");
}
Скриншоты сохраняются на SD-карте устройства. Однако название скриншота на SD-карте:
UnknownTestClass-unknownTestMethod-Home-1.jpg
Почему он отображается как UnknowntestClass-unknownTestMethod? Как мне получить больший контроль над наименованием?
Ответ №1:
ScreenShotter
использует трассировку стека для определения имени файла на основе тестового класса и метода тестирования, которые он может найти в трассировке стека.
ActivityScenario.onActivity()
запускает переданное действие в основном потоке текущего действия. Тесты выполняются в другом потоке. Итак, действие, которое вы передаете, будет иметь трассировку стека, которая не включает в себя метод тестирования или тестовый класс. Вот причина, по которой вы видите UnknownTestClass-unknownTestMethod
. Когда выполняется анонимная функция, она не выполняется «в контексте» тестового класса.
Один из способов исправить это — не использовать onActivity()
. ActivityScenario.launch()
ваша активность уже должна быть переведена в состояние «возобновлено», то есть сделать ее видимой. Измените свой SetupHelper.screenshot()
на следующий:
public static void screenshot(String name){
ScreenShotter.takeScreenshot(name, activity /* activity */);
}
Это изменит имя файла скриншота, включив в него фактический тестовый класс и имя метода тестирования.