NUnit : les assertions qui parlent.

Une des choses qui me semblent la plus importante en développement est le test d’une application. Comment je pourrais être sur du comportement d’une application si je ne la teste pas. Malgré tout, la qualité des tests est très différente en fonction du langage utilisé. Personnellement, j’aime quand mes tests « parlent« .

Comme de nombreux frameworks de test, NUnit a commencé comme un portage de JUnit. Pourtant à un moment de son histoire, il a su s’en écarter pour évoluer. Prenons un exemple simple pour bien comprendre l’idée, une simple assertion en JUnit puis en NUnit.

Version JUnit :

assertEquals(2+2, 4);

Version NUnit :

Assert.AreEqual(2+2, 4);

Bon, au final pas trop de différences. Comme je le disais, NUnit a commencé comme une traduction. Il est donc normal qu’il se ressemble fortement. Mais NUnit propose une autre syntaxe que je préfère grandement.

Autre version NUnit :

Assert.That(2+2, Is.EqualTo(4));

Avant d’aller plus loin, je précise que je sais que cette version est plus verbeuse. La ligne de code est plus longue, plus de parenthèses… Pourtant, je trouve qu’on y gagne beaucoup. Si on transforme un peu cette ligne en retirant le superflu, on obtient la phase :

Assert that 2+2 is equal to 4.

Une phrase syntaxiquement correcte en anglais qui a du sens.Plutôt que de comprendre le code, il suffit de le lire comme s’il s’agissait d’une phrase.

D’autres frameworks de test permettent de représenter les tests comme des phrases. Je pense par exemple à Machine.Specification qui utilise intelligemment les lambdas pour ses tests. De manière général, les frameworks de BDD font en sorte de traduire une « histoire » par du code.