On Tuesday, 31 March 2015 at 14:13:29 UTC, Johannes Pfau wrote:
Am Tue, 31 Mar 2015 13:31:58 +0000
schrieb "Dicebot" <[email protected]>:

> But here's the problem:
>
> 1) The compile time approach requires some kind
> of explicit registration of the unittests. At least one > mixin per
>    module.
> 2) This mixin will usually provide a module constructor. But
> using module constructors will cause issues with cycle > detection.

This is not really true. You only need one mixin in the root module(s), rest can be iterated recursively by test runner itself using __traits(allMembers) reflection. Only issue with that approach is that last time I checked there was a DMD bug which prevented from getting complete list of imported modules via allMembers. Should be fixable.

But then you still have to explicitly import (or at least name) all modules that should be tested. This is a drawback compared to the current builtin-unittests where you do not have to explicitly import
to-be-tested modules.

This is true, but importing modules by name can be code that is generated. Which is exactly what I do with dtest [1] and unit-threaded [2]. It's not that big of a deal when it's part of the build system.

Atila

[1] http://code.dlang.org/my_packages/dtest
[2] http://code.dlang.org/my_packages/unit-threaded


I was thinking of a fully-automated way where you only have to import a module (could even be object-d => no explicit import required) and have all tests run. This can be done by mixing in a module constructor
in every module. From that constructor you'd call
std.unittest.registerTest(...) and in the main function you could then call std.unittest.runTests(). This way you never need to name or know
the tested modules.

IIRC std.benchmark used that approach, with the drawback of manual
mixins and module constructor cycle issues.


And module constructors are not needed at all for this, there is http://dlang.org/traits.html#getUnitTests

Sure, but I was thinking about a runtime registration scheme as
explained above.

Reply via email to