Я пытаюсь проверить представления в элементах 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
.
Что я могу сделать, чтобы решить мою проблему?