Нет, я думаю, что вы поняли, что тестирование немного не так. Во-первых, Toolbar
не расширяет / не наследует TextView
, поэтому у него не может быть текста, но вы можете поместить TextView
внутри Toolbar
. Я подготовил простой код, чтобы показать вам идею автоматизированных тестов с использованием Espresso
.
Создайте новый образец приложения, поместите этот макет в activity_main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintHeight_percent="0.3"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/colorAccent"/>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/toolbar"
app:layout_constraintBottom_toBottomOf="@id/toolbar"
app:layout_constraintLeft_toLeftOf="@id/toolbar"
app:layout_constraintRight_toRightOf="@id/toolbar"
android:text="SomeTextBeforeChange"
android:textColor="#FFFFFF"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:text="Change text after click"/>
в вашем MainActivity
:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
final TextView textView = findViewById(R.id.textview);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText("Changed text");
}
});
}
}
Как вы видите, может быть похожим View
на ваши - Toolbar
, TextView
и Button
, что изменяет текст TextView
.
Давайте сделаем автоматический тест, используя Espresso
.
В подпапке androidTest создайте новый класс, назовите его, например, MainActivityTest
.
Определите ActivityTestRule
. Читайте об этом в Android документах
Вам также могут понадобиться эти Gradle
зависимости:
androidTestImplementation 'com.android.support.test:runner:1.0.2'<br>
androidTestImplementation 'com.android.support.test:rules:1.0.2'<br>
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
Правило:
@Rule
public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>
(MainActivity.class);
Затем определите открытый метод с типом возврата void, аннотированным @Test
.
Внутри этого метода вы можете определить свой TextView
, вызвав Espresso.onView(ViewMatchers.withId(your.textview.id));
Чтобы проверить, содержит ли он указанный текст, необходимо вызвать `textview.check (ViewAssertions.matches (ViewMatchers.withText (" ожидаемый текст ")));
Я не буду объяснять этим методам, что именно они делают, потому что их имена говорят сами за себя, но если у вас возникли проблемы с их пониманием, у вас есть много ресурсов здесь, на StackOverflow
. В приведенном выше коде я написал следующий простой тест, поэтому вы можете проанализировать его, если хотите:
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class);
@Test
public void checkIfButtonChangesText(){
// TextView
ViewInteraction textView = Espresso.onView(ViewMatchers.withId(R.id.textview));
// Button
ViewInteraction button = Espresso.onView(ViewMatchers.withId(R.id.button));
//check if TextView contains text: "SomeTextBeforeChange"
textView.check(ViewAssertions.matches(ViewMatchers.withText("SomeTextBeforeChange")));
// analogically with Button, text: "Change text after click"
button.check(ViewAssertions.matches(ViewMatchers.withText("Change text after click")));
// perform button click:
button.perform(ViewActions.click());
//Check if text has been changed to "Changed text"
textView.check(ViewAssertions.matches(ViewMatchers.withText("Changed text")));
}
}