Unit tests called multiple times?

William squidkidsignup at gmail.com
Fri Apr 12 16:08:38 PDT 2013


On Friday, 12 April 2013 at 23:01:55 UTC, Steven Schveighoffer 
wrote:
> On Fri, 12 Apr 2013 18:52:50 -0400, William 
> <squidkidsignup at gmail.com> wrote:
>
>> I'm compiling a medium-sized project written in D with the 
>> -unittests flag.  I have some writeln statements in my unit 
>> tests, for debug purposes, and I've noticed that certain unit 
>> tests are being run more than once.  Sample output is along 
>> these lines:
>>
>> DEBUG: unit test started...
>> DEBUG: loop found whatever
>> DEBUG: iteration successful
>> DEBUG: bar is equal to bar
>> DEBUG: unit test passed...
>> DEBUG: unit test started...
>> DEBUG: loop found whatever
>> DEBUG: iteration successful
>> DEBUG: bar is equal to bar
>> DEBUG: unit test passed...
>> DEBUG: unit test started...
>> DEBUG: loop found whatever
>> DEBUG: iteration successful
>> DEBUG: bar is equal to bar
>> DEBUG: unit test passed...
>>
>> is this standard behavior for DMD?  Is it documented anywhere?
>>  It's not much of a problem, but it strikes me as rather odd, 
>> and makes the debug output difficult to read.
>
> Are your unit tests inside templates?  If so, they are 
> instantiated once per template.  To fix, move outside the 
> template.
>
> This actually can be a nice feature, and at the same time 
> horrible.  It's nice because you can parameterize your unit 
> tests!  It's horrible because you have to be careful your unit 
> tests are valid for all possible instantiations!
>
> -Steve

Thank you!  That was exactly it.  I tend to put my unittests 
directly after the functions/classes they test, so my opApply for 
an implementation of n-dimensional associative arrays, (with 
parameterized keys/values) was having its associated unittest 
called every time the template was instantiated.  Moving it to 
the module level fixed the problem, although now it reads as 
though the test is intended to test the whole class, when in fact 
it only verifies the correctness of opApply.  Still, feels good 
to have weird behavior demystified.


More information about the Digitalmars-d mailing list