Falsk positiv

Ett fel jag stöter på hela tiden när jag tittar på mina äldre selenium-tester är falska positiver. Det handlar om verifieringspunkter som inte alls tillför något värde utan kommer att släppa igenom nästan vad som helst utan att ge fel.

Vanligast är det att dessa punkter uppstår vid användandet av metoden IsFalse(bool expr) som alltså ger ett felmeddelande om expr skulle vara sant, dvs true. Det verkar ju jättebra om man vill kontrollera att någonting inte visas på en sida, men ackså lätt det är att använda det på fel sätt!

Att någonting inte visas är mer regel än undantag; det finns förmodligen hundratals fall där det inte visas och ett där det visas. Det ger ju i sin tur effekten att expr i stort sett alltid kommer vara falsk, false, och testfallet kommer ge gröna staplar.

Exempel:
Ett klassiskt scenarie, logga in. Här vill jag kontrollera att inloggningen lyckas och alltså att inget felmeddelande visas:

selenium.Type(username, "css=#username");
selenium.Type(password, "css=#pass");
selenium.Click("css=#submit");
assert.isFalse(selenium.IsElementPresent("css=.applications #error"),
   "Hittade ett felmeddelande. Login fungerade inte.\n");

Om klassen ”application” byter namn av någon anledning så kommer den här kontrollen alltid att vara false, dvs ge en grön stapel i testfallet, även om det eftersökta error-elementet visas.

Så mitt tips är väl egentligen att vara restriktiv med att kontrollera att saker inte finns och att i de fall man måste göra det kombinera med flera kontroller som validerar den kontrollen. I exemplet vet jag att om felet visas så kommer jag inte gå vidare till startsidan som förväntat vilket i så fall är en bättre kontroll:

selenium.Type(username, "css=#username");
selenium.Type(password, "css=#pass");
selenium.Click("css=#submit");
assert.isTrue(selenium.IsElementPresent("css=.start-page"),
   "Startsidan visas inte. Fallerade loginförsöket?\n");

En reaktion på ”Falsk positiv

Kommentarer inaktiverade.