digitalmars.D - Unit testing
- Sjoerd van Leent (36/36) Oct 13 2004 Hi all,
- Sjoerd van Leent (16/67) Oct 14 2004 A better rephrase of my above mentioned code could also be:
Hi all, As I was doing a presentation on school about unit testing I bumped into the following matter: If I need to describe a unit test testing border values I had to write something like the following: ----- CODE ----- class SomeClass {...} unittest { const static short[] testdata = [-1, 0, 1, 99, 100, 101]; foreach(short data; testdata) { try { SomeClass some = new SomeClass(); some.setMethod(data); } catch(Exception e) { writefln("Value %s caused exception: %s", data, e.toString()); } } } ----- END CODE ----- Can't this be replaced by something like: ----- CODE ----- class SomeClass {...} unittest around(short data) in [-1, 0, 1, 99, 100, 101] { SomeClass some = new SomeClass(); some.setMethod(data); } ----- END CODE ----- The keyword around enforces the unittest to be called six times (the length of the array) and has a value type short in it. This way, even when the setMethod function fails (which is the whole idea of border values) it simply goes on to the next value. Also it makes code much shorter. For unit tests this is definitly a pro. Perhaps an idea for D 2.0 or some test framework? Regards, Sjoerd
Oct 13 2004
Sjoerd van Leent wrote:Hi all, As I was doing a presentation on school about unit testing I bumped into the following matter: If I need to describe a unit test testing border values I had to write something like the following: ----- CODE ----- class SomeClass {...} unittest { const static short[] testdata = [-1, 0, 1, 99, 100, 101]; foreach(short data; testdata) { try { SomeClass some = new SomeClass(); some.setMethod(data); } catch(Exception e) { writefln("Value %s caused exception: %s", data, e.toString()); } } } ----- END CODE ----- Can't this be replaced by something like: ----- CODE ----- class SomeClass {...} unittest around(short data) in [-1, 0, 1, 99, 100, 101] { SomeClass some = new SomeClass(); some.setMethod(data); } ----- END CODE ----- The keyword around enforces the unittest to be called six times (the length of the array) and has a value type short in it. This way, even when the setMethod function fails (which is the whole idea of border values) it simply goes on to the next value. Also it makes code much shorter. For unit tests this is definitly a pro. Perhaps an idea for D 2.0 or some test framework? Regards, SjoerdA better rephrase of my above mentioned code could also be: ----- CODE ----- class SomeClass {...} unittest foreach(short data; [-1, 0, 1, 99, 100, 101]) fail { writefln("Failure on: %s", data); } body { SomeClass some = new SomeClass(); some.setMethod(data); } ----- END CODE ----- This gives the possibility to register the unittest (in this case using writefln) and it is more conform to how D looks. Regards, Sjoerd
Oct 14 2004