Тестовый заказ с эспрессо
Есть ли способ установить тестовый порядок выполнения в android?
Я использую среду Espresso и нуждаюсь в проверке множества действий и переходов между ними. Я хочу написать другой тест для этих действий, но мне нужен конкретный заказ для запуска этих тестов.
Ответы
Ответ 1
Как сказал @spinster выше, вы должны написать свои тесты таким образом, чтобы порядок не имел значения.
Я считаю, что Junit 3 будет запускать тесты в алфавитном порядке для полного имени класса, поэтому теоретически вы можете контролировать порядок, назвав их (имя пакета, имя класса, имя метода) в алфавитном порядке в том порядке, в котором вы хотели бы их выполнить, но я бы не рекомендовал этого.
См:
Как запустить тестовые методы в определенном порядке в JUnit4?
Как предварительно определить последовательности выполнения тестовых примеров junit?
Ответ 2
эспрессо установить порядок выполнения тестов
С Junit 4.11 поставляется с аннотацией @FixMethodOrder. Вместо использования пользовательских решений просто обновите версию junit и аннотируйте тестовый класс с помощью FixMethodOrder (MethodSorters.NAME_ASCENDING). Проверьте примечания к выпуску для деталей.
Вот образец:
import org.junit.runners.MethodSorters;
import org.junit.FixMethodOrder;
import org.junit.Test;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {
@Test
public void A_firstTest() {
System.out.println("first");
}
@Test
public void B_secondTest() {
System.out.println("second");
}
}
Ответ 3
Вы можете добавить аннотацию в качестве тестового приемника, как показано ниже:
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
чуть выше имени класса
Ответ 4
Да Вы можете установить порядок, используя порядковый номер с именем test_, см. пример ниже -
public class MyEspressoTest
extends ActivityInstrumentationTestCase2<UserLoginActivity> {
private UserLoginActivity mActivity;
public MyEspressoTest() {
super(UserLoginActivity.class);
}
@Before
public void setUp() throws Exception {
super.setUp();
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
mActivity = getActivity();
}
public void test1InvalidPropigerLogin() {
// Type text and then press the button.
//setContentView function to see the layout
onView(withId(R.id.username))
.perform(typeText("[email protected]"), closeSoftKeyboard());
onView(withId(R.id.password))
.perform(typeText("hhhhh"), closeSoftKeyboard());
onView(withId(R.id.user_login_button)).perform(click());
// Check that the text was changed.
onView(withId(R.id.login_status))
.check(matches(withText("Invalid username or password")));
//System.out.println("Test pass with invalid user and password");
}
public void test2ValidPropigerLogin() {
// Type text and then press the button.
onView(withId(R.id.username))
.perform(typeText("[email protected]"), closeSoftKeyboard());
onView(withId(R.id.password))
.perform(typeText("gggggg"), closeSoftKeyboard());
onView(withId(R.id.user_login_button)).perform(click());
//System.out.println("Test pass with valid user and password");
}
public void test3ForgetPasswordButton() {
onView(withId(R.id.forgot_pwd_button)).perform(click());
//onView(isRoot()).perform(ViewActions.pressBack());
onView(withId(R.id.email_edittext))
.perform(typeText("[email protected]"), closeSoftKeyboard());
onView(withId(R.id.reset_password_button)).perform(click());
// Check that the text was changed.
onView(withId(R.id.reset_result))
.check(matches(withText("Email not registered with propiger")));
}
public void test4ForgetPasswordButton2() {
onView(withId(R.id.forgot_pwd_button)).perform(click());
onView(withId(R.id.email_edittext))
.perform(typeText("[email protected]"), closeSoftKeyboard());
onView(withId(R.id.reset_password_button)).perform(click());
// Check that the text was changed.
onView(withId(R.id.reset_result))
.check(matches(withText("Reset password link sent successfully")));
}
public void test5RegisterButton() {
onView(withId(R.id.register_button)).perform(click());
//onView(isRoot()).perform(ViewActions.pressBack());
onView(withId(R.id.register_name_edittext))
.perform(typeText("Hill Hacker"), closeSoftKeyboard());
onView(withId(R.id.register_email_edittext))
.perform(typeText("[email protected]"), closeSoftKeyboard());
onView(withId(R.id.register_mobileno_edittext))
.perform(typeText("9090909090"), closeSoftKeyboard());
onView(withId(R.id.register_password_edittext))
.perform(typeText("password111"), closeSoftKeyboard());
onView(withId(R.id.register_confirm_password_edittext))
.perform(typeText("password111"), closeSoftKeyboard());
//onView(withId(R.id.register_country_spinner)).perform(click());
//onView(isRoot()).perform(withId(R.id.register_country_spinner, Sampling.SECONDS_15));
onData(allOf(is(instanceOf(String.class)), is("India")))
.perform(click());
onView(withId(R.id.register_country_spinner)).check(matches(withText(containsString("India"))));
onView(withId(R.id.register_button)).perform(click());
}
}
Ответ 5
Мне нужно сначала протестировать тест loginActivity, если он преуспеет, он войдет в систему пользователя. И тогда я должен проверить другие действия. Тест LogoutActivity должен работать в конце. Таким образом, требуется последовательность действий.
Ответ 6
Добавьте аннотацию @FixMethodOrder (MethodSorters.NAME_ASCENDING) поверх имени класса и назовите методы в порядке возрастания.
См. приведенные ниже ссылки. Ответ на этот вопрос должен быть достигнут.
fooobar.com/questions/381874/...
fooobar.com/questions/381874/...
Ответ 7
У вас есть 3 способа:
способ 1: JUnit 4 и 5 работают
@Test
public void testFunctionMain() {
test1();
test2()
test3();
}
способ 2: JUnit 4 и 5 работают
использовать @FixMethodOrder
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(AndroidJUnit4::class)
class LoginActivityTest {
}
способ 3: работа Junit5
использовать @Order
@Test
@Order(2)
public void testFunction(){
}