Foto av Björn Beskow

'Bara syntax' inte så bara!

// Björn Beskow

Den växande populariteten hos domän-specifika språk (eller DSL, Domain Specific Languages) har visat med önskvärd tydlighet att syntax är viktigare än man tror för att ge en formalism slagkraft och momentum. Det handlar ofta både om språklig elegans - att kunna uttrycka det man vill uttrycka på ett naturligt, enkelt och lättbegripligt sätt, och om uttryckskraft - att kunna ge rik och naturlig semantik åt enkla språkliga konstruktioner.

[JUnit 4.4] har nyligen släppts, och en av de största nyheterna är just “bara syntax”. Parallellt med de välkända assertEquals() m.fl. införs nu Joe Walnes flexibla assertion syntax, ursprungligen framvuxen som en del av JMock:

assertThat(x, is(3));
assertThat(x, is(not(4)));
assertThat(responseString, either(containsString("color")).
    or(containsString("colour")));
assertThat(myList, hasItem("3"));

Eller mer generaliserat

assertThat([value], [matcher statement]);

Fördelen är inte bara att syntaxen är lättare att både skriva och läsa. Den stora vinsten ligger i ökad uttryckskraft: Matchnings-predikat kan kombineras (med not, or och and t.ex.) till godtycklig komplexitet. Om inte de fördefinierade matchnings-predikaten är nog kan man definiera egna “matchers” med rik och naturlig semantik. Och mycket riktigt används även den nya assertThat-syntaxen för att möjliggöra ytterligare uttryckskraft i form av två nya, spännande mekanismer i JUnit 4.4: assumptions och theories.

Det är glädjande att se att JUnit-projektet fått nytt liv!

Kommentarer