[squeak-dev] Porting JUnit's Theories to SUnit?

Frank Shearar frank.shearar at gmail.com
Mon Jul 11 14:02:49 UTC 2011


Has anyone looked into porting JUnit 4's Theories into SUnit? (NUnit
also uses theories, in 2.5)

In brief, a Theory is a test that takes a parameter. So what before might say

testMyFooPrintsIntegersHomoiconically
    -1 to: 1 do: [:i | self assert: i myFoo = i printString
description: 'Failure for integer ', i printString]

becomes

testMyFooPrintsIntegersHomoiconically: anInteger
    self assert: anInteger myFoo = anInteger printString description:
'Failure for integer ', anInteger printString

You define a bunch of DataPoints, and then the runner runs that test
for every data point. In JUnit data points are defined through
constants with @DataPoint/@DataPoints annotations, but of course we
can do them however we want. Further, theories can make assumptions,
which are essentially pretest filters. For instance, in a TestCase
dealing with real algebra, a test for square roots might say

testSquareRootReturnsRoot: anInteger
    self assumeThat: [anInteger > 0].
    "Rest of test"

and then the test would only run on positive data points.

The essential idea is simply decoupling the test itself - the theory -
from the data, so you don't have to roll your own looping construct
when testing multiple data points.

frank



More information about the Squeak-dev mailing list