Запрещено запускать методы при тестировании всего класса, хотя каждый тест проходит при индивидуальном запуске - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь проверить представления в элементах RecyclerView. При запуске тестов по отдельности все они работают, но при попытке тестирования всего класса я получаю

java.lang.Exception: нет запускаемых методов

Я создал вспомогательный класс для щелчка по указанному представлению: (в каталоге androidTest)

public class RecyclerViewTools {

/**
 * This method clicks a specified view in RecyclerView's item
 * @param id position of item to perform click
 */
public ViewAction clickChildWithId(final int id){
    return new ViewAction() {
        @Override
        public Matcher<View> getConstraints() {
            return null;
        }

        @Override
        public String getDescription() {
            return null;
        }

        @Override
        public void perform(UiController uiController, View view) {
            View v = view.findViewById(id);
            v.performClick();
        }
    };
}}

и мои тесты в другом классе:

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

private RecyclerViewTools recyclerViewTools;

@Rule
public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class);

@Before
public void setUp(){
    recyclerViewTools = new RecyclerViewTools();
}

@After
public void tearDown(){
    recyclerViewTools = null;
}

/*
 * This tests check if all buttons in recyclerview are working properly
 * Shorten variables:
 * ToggleButton -tbn
 */

@Test
public void TBNs_isChecked(){
    onView(withId(R.id.recylerview_alarms))
            .perform(RecyclerViewActions.actionOnItemAtPosition(0,
                    recyclerViewTools.clickChildWithId(R.id.monday_togglebutton)))
            .perform(RecyclerViewActions.actionOnItemAtPosition(0,
                    recyclerViewTools.clickChildWithId(R.id.tuesday_togglebutton)))
            .perform(RecyclerViewActions.actionOnItemAtPosition(0,
                    recyclerViewTools.clickChildWithId(R.id.wednesday_togglebutton)))
            .perform(RecyclerViewActions.actionOnItemAtPosition(0,
                    recyclerViewTools.clickChildWithId(R.id.thursday_togglebutton)))
            .perform(RecyclerViewActions.actionOnItemAtPosition(0,
                    recyclerViewTools.clickChildWithId(R.id.friday_togglebutton)))
            .perform(RecyclerViewActions.actionOnItemAtPosition(0,
                    recyclerViewTools.clickChildWithId(R.id.saturday_togglebutton)))
            .perform(RecyclerViewActions.actionOnItemAtPosition(0,
                    recyclerViewTools.clickChildWithId(R.id.sunday_togglebutton)));
}


// Check if switch is being checked
@Test
public void switch_isChecked(){
    onView(withId(R.id.recylerview_alarms))
            .perform(RecyclerViewActions.actionOnItemAtPosition
                    (0, recyclerViewTools.clickChildWithId(R.id.enable_switch)));
}}

Как я читал, корень проблемы может заключаться в использовании статических методов (что было clickChildWithId(id), я решил инициализировать класс каждый раз при запуске теста. Единственная проблема, которую я вижу и не знаю как этого избежать, это вспомогательный метод, который возвращает ViewAction.

Что я могу сделать, чтобы решить мою проблему?

...