Het testen van landselectievelden stopt vaak bij de eerste assertie dat de lijst wordt weergegeven. Het besturingselement lijkt triviaal — een lijst met landen, een klik, een waarde — en juist die schijn is waarom zijn defecten zo lang overleven.
Het besturingselement is een kleine interface boven een grote dataset, en elke interessante fout leeft in de wisselwerking tussen de twee. Dit artikel behandelt de vormen die het besturingselement kan aannemen, de verschillende soorten zoeken die mensen ervan verwachten, de sorteerregels die makkelijk fout gaan, en het toetsenbordpad dat meestal het laatste is dat iemand test.
Welke vormen neemt het besturingselement aan?
Ten minste vier, en ze falen zo verschillend dat een test die voor de ene is geschreven niets bewijst over de andere. Er is de gesloten lijst die elke optie toont, de doorzoekbare lijst die filtert terwijl de gebruiker typt, de hiërarchische kiezer die eerst om een regio vraagt en dan om een land, en de automatische aanvulling die vrije tekst accepteert en die daarna omzet.
De laatste is de belangrijke. Zodra het besturingselement vrije tekst accepteert, is het geen selector meer; het is een matchprobleem met een interface erbovenop, en de faalwijzen veranderen van “de optie werd niet aangeboden” naar “de optie werd aangeboden en er is iets anders opgeslagen”.
Test elke vorm die je product werkelijk levert, en test de overgang ertussen. Een besturingselement dat boven een bepaald aantal opties van een gewone lijst naar een doorzoekbare lijst overschakelt, wordt alleen op de grens geoefend door een test die opzettelijk aan beide kanten ervan landt.
Wat betekent zoeken in dit besturingselement?
Verschillende dingen, en gebruikers maken geen onderscheid tussen die dingen wanneer ze typen.
| Wat de gebruiker typt | Wat die verwacht | Wat er vaak gebeurt |
|---|---|---|
| De eerste paar letters van een naam | Een gefilterde lijst, in de eigen volgorde van de lijst | Filteren werkt, ordening raakt verstoord |
| Een code in plaats van een naam | Het land met die code | Codes worden helemaal niet doorzocht |
| Een vertrouwde korte vorm | Het land, één keer | Er bestaat geen alias, lijst is leeg |
| Een naam met een accent die zonder accent wordt getypt | Hetzelfde land | Vergelijking is byte-exact |
Elke rij is een aparte assertie. Zoeken op naam, zoeken op code, zoeken op alias en zoeken op een spelling die alleen in diakritische tekens of hoofdletters verschilt, zijn vier functies, en het leveren van één ervan is geen bewijs over de andere drie.
Er is ook de vraag wat er gebeurt wanneer zoeken niets vindt. Een lege lijst zonder uitleg leest als een kapot besturingselement, en de volgende stap van de gebruiker is meestal hetzelfde nog eens iets anders typen, wat dezelfde lege lijst oplevert.
Waarom is sorteervolgorde zo makkelijk fout te doen?
Een landenlijst sorteren lijkt een alfabetiseertaak tot de lijst het Latijnse schrift verlaat, en zelfs daarbinnen verandert de vraag welk lidwoord of partikel een naam leidt het antwoord.
Drie conventies concurreren. Sorteren op weergavenaam geeft de volgorde die een lezer verwacht voor de namen die hij kan zien. Sorteren op een onderliggende code geeft een volgorde die stabiel maar voor een gebruiker betekenisloos is, wat verschijnt als een lijst die bovenaan door elkaar lijkt te staan. Sorteren op een interne identificatie geeft een volgorde die verschuift telkens wanneer de onderliggende gegevens veranderen, wat verschijnt als een lijst die zich tussen releases anders gedraagt zonder dat iemand de sorteercode heeft aangeraakt.
Wat je ook kiest, de volgorde moet worden berekend met de collatieregels van de taal die wordt weergegeven, niet met een standaard bytevergelijking. Een lijst die in de ene taal correct is en in een andere zichtbaar fout, is de signatuur van een bytevergelijking die een sorteerlabel draagt.
Twee verdere details zijn een expliciete test waard. De positie van een land waarvan de naam begint met een teken dat meerdere geldige ordeningen kent, en de positie van een land dat gewoonlijk met een leidend lidwoord wordt aangeduid. Beide zijn het soort geval waarin de aanname van een implementator onzichtbaar is tot iemand uit die markt de lijst leest.
Blijven de opties consistent wanneer iets anders verandert?
Een landbesturingselement staat zelden alleen op een formulier. Het staat meestal naast een taal, een valuta, een telefoonveld of een adresblok, en die velden hangen vaak af van de waarde van het land.
De test die hier defecten vindt, is een herberekeningstest. Verander het land en controleer wat er met elk afhankelijk veld gebeurt: wordt het gewist, opnieuw afgeleid, ongemoeid gelaten, of tegen het nieuwe land gevalideerd? Elk van die keuzes is verdedigbaar en geen twee ervan leveren dezelfde gebruikerservaring op, dus de keuze moet worden genoemd in plaats van ontdekt.
Het moeilijkere geval is een afhankelijk veld dat werd ingevuld voordat het land werd gekozen. Als het land daarna verandert, kan een waarde die geldig was voor de vorige selectie nu ongeldig zijn, en het besturingselement moet beslissen of het die waarde houdt, markeert of weggooit. Het afhankelijke veld eerst invullen en dan het land veranderen is een tweestapstest die de meeste suites nooit uitvoeren.
Voor ontwikkelaars: test het toetsenbordpad als een eersteklas pad
Muisinteractie dekt de voor de hand liggende gevallen en mist de gevallen die ertoe doen voor iedereen die geen muis gebruikt. Een volledige ronde oefent het typen in het besturingselement om te filteren, het bewegen door resultaten zonder het veld te verlaten, en het kiezen vanuit het toetsenbord alleen.
Het gedrag van schermlezers verdient een eigen controle, want een lijst die visueel is gefilterd en een lijst die als gefilterd wordt aangekondigd zijn verschillende ervaringen. Als het aantal resultaten visueel wordt getoond maar niet wordt aangekondigd, heeft de gebruiker geen manier om een smal filter van een leeg filter te onderscheiden.
Houd de testdata dan eerlijk. Aliasstabellen, weergavenamen en getypte invoer in een testsuite horen zichtbaar verzonnen te zijn, zodat niemand later een fixture voor een echte vermelding aanziet, en de landen- en regiorgids is de betere plek om te kijken wanneer je wilt zien hoe namen en codes samen worden gepresenteerd. Een enkele landpagina zoals de vermelding voor Brazilië is een nuttige referentie voor het detailniveau dat een land buiten het besturingselement draagt.
Elke optienaam, alias en getypt voorbeeld in dit artikel is verzonnen ter illustratie. De lijstvermeldingen die hier worden gebruikt zijn synthetisch testmateriaal, geen echte picklist, en geen getoonde fixture mag worden behandeld als de werkelijke naam van een land of als bewijs over hoe een bepaald product zich gedraagt.
Volgende stappen
Schrijf vier tests, één per zoeksoort, en voer ze uit tegen welke vorm van besturingselement je ook levert. Herhaal dan de hele ronde met de muis losgekoppeld. De gids over land versus taal legt uit tot welke laag van een scherm het besturingselement werkelijk behoort, en de gids over grensoverschrijdende adresscenario’s laat zien wat er gebeurt wanneer de waarde van dit besturingselement niet het enige land in de transactie is.