Testning av geometriska konstruktioner

image17Satt och fick huvudvärk på jobbet nyss. Försökte testa algoritmer för att generera en viss typ av geometrisk data; inte klassiska Circle(), Point() och Line() utan mer specialinriktat än så (maskinstyrning om du nu måste veta).

I alla fall; eftersom jag är den ende utvecklaren med TDD-inriktning på jobbet, är koden ibland svår att testa.

I detta fall var det jobbigt att kontrollera om genererad geometri stämde överrens med förväntningar eftersom inte en enda av c:a 15 klasser implementerade Equals() - och referenslikhet räcker inte långt då man gör enhetstester av instanser som är lika i matematisk mening (samma "värde").

  • Alternativ ett: implementera Equals() och GetHashCode() på alla klasser. Huvudvärk! Av flera skäl:

  1. Det är bökigt att få rätt på Equals() i C# (det finns hur många trådar som helst som behandlar detta på nätet)
  2. Det stökar ned de i övrigt ganska atomära klasserna jag ville testa
  3. Övriga utvecklare hade inte uppskattat att jag lagt till detta "aber" i klasserna
  4. Det hade påtvingat en "implicit policy" vid tilläggande av fler, mer sammansatta klasser. Att implementera Equals() för dem är helt onödigt för slutprodukten.

  • Alternativ två, som jag var rädd att välja först, verkar efter dessa två timmars huvudbry inte så dumt längre. Det är att helt enkelt bygga specialtester för "de vanligaste klasserna" -- det är trots allt det enda jag kan testa i dagsläget (framtida klasser är svåra att testa!).

Läxa att lära:
Equals() är inte nödvändig för tillstånds-testning!




Läs även andra bloggares åsikter om tdd, geometri, testning, programmering

Kommentarer

Kommentera inlägget här:

Namn:
Kom ihåg mig?

E-postadress: (publiceras ej)

URL/Bloggadress:

Kommentar:

Trackback
RSS 2.0