Je veux tester avec Espresso
cadre de test android que tous les titres attendus sont affichés dans ListView.Affirmation correcte avec Espresso J'ai élément énuméré dans ListView
J'ai une activité avec ListView qui montre les fichiers dans le répertoire. Chaque élément ListView est un Item
objet:
/**
* Item
*/
static class Item {
private String title;
private IFileInfo fileInfo;
private int imageResourceId;
public Item(String title, IFileInfo fileInfo, int imageResourceId)
{
this.title = title;
this.fileInfo = fileInfo;
this.imageResourceId = imageResourceId;
}
public IFileInfo getFileInfo() {
return fileInfo;
}
public String getTitle() {
return title;
}
public int getImageResourceId() {
return imageResourceId;
}
}
Le titulaire fixe juste titre et de l'image pour l'article:
/**
* Adapter
*/
private class Adapter extends ArrayAdapter<Item> {
private LayoutInflater layoutInflater;
public Adapter(Context context, List<Item> objects) {
super(context, 0, objects);
layoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.file_dialog_row, null);
convertView.setTag(new Holder(convertView));
}
Item item = getItem(position);
Holder holder = (Holder) convertView.getTag();
holder.getTitleView().setText(item.getTitle());
holder.getTitleView().setTextColor(itemColorStateList);
holder.getImageView().setImageResource(item.getImageResourceId());
return convertView;
}
}
Aménagement:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<ImageView android:layout_alignParentLeft="true" android:id="@+id/fdrowimage"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:paddingRight="3dp" android:paddingLeft="3dp"/>
<TextView android:text="@+id/fdrowtext" android:layout_width="wrap_content"
android:id="@+id/fdrowtext"
android:layout_alignTop="@+id/fdrowimage" android:layout_alignBottom="@+id/fdrowimage"
android:gravity="center_vertical" android:layout_height="wrap_content"
android:textSize="19dp"/>
A l'origine je voulais pour affirmer que l'objet avec le texte "N" est listé (j'ai une liste de Item
objets et je veux affirmer pour chacun il est montré).
Pour vérifier que cela fonctionne en fait, je l'ai vérifié le test devrait échouer pour un certain titre de l'article fait pas montré, mais pour une raison quelconque les essais succès:
onData(allOf(is(instanceOf(Item.class)), withText("someNotListedItemTitle"), isDisplayed()));
Voici le code de test complet:
...
@Test
public void testShowFiles() throws IOException {
List<File> files = new LinkedList<>();
for (int i = 0; i < 10; i++) {
File tmpFile = new File(rootFilesFolder, generateUniqueString());
files.add(tmpFile);
if (i % 2 == 0)
FileUtils.touch(tmpFile); // create file
else
FileUtils.forceMkdir(tmpFile); // create folder
}
// add not shown for sure in ListView item
File notExistingListed = new File(rootFilesFolder, generateUniqueString());
files.add(notExistingListed);
// activity creates ListView that shows file name for each file in TextView with @+id/fdrowtext
startActivityForPath(rootFilesFolder);
for (File eachFile : files) {
// should fail for `notExistingListed`
onData(anyOf(is(instanceOf(Item.class)), withText(eachFile.getName()), isDisplayed()));
}
}
Quelle est l'assertion correcte avec Espresso? Devrais-je créer un Matcher personnalisé pour mon article?
Il existe une différence significative entre 'ListView' et' RecyclerView' comme indiqué ici: https://google.github.io/android-testing-support-library/docs/espresso/lists/ – 4ntoine