Hack to name unit tests?
Christopher Wright
dhasenan at gmail.com
Wed Nov 28 20:56:54 PST 2007
Robert Fraser wrote:
> I'm creating a Flectioned-based way to run unit tests individually
> (it'll be hooked into a front-end, so you can run test suites, repeat
> only failed tests after a code change, etc.)
>
> However, I have run into a problem: unit tests can't be named. Right now
> I have a signature system, but I was wondering if there's any hackish
> way to predictably insert a string into the generated object file in a
> way that users can name unittests. That is to say, given a function
> pointer, is there any way I can scan the code to see if a name has been
> given to the unit test, and if so extract that name at runtime?
>
> Ideally, it'd be as easy for the user as something like:
>
> unittest
> {
> assert(":testName:");
> // Rest of test goes here...
> }
>
> Right now, I have the associations being done in the front-end I'm
> working on, that scans the code for comments in a particular format and
> associates those with the unit tests. However, that ties the unit test
> executor back-end to the code analysis front-end, so I was hoping
> there's a better way.
>
> Thanks!
class Unittest (string _name, alias _dg) : IUnittest {
static string name = _name;
static void delegate() test = _dg;
}
Usage:
Unittest!("my test for wossname", {
assert (false, "haven't gotten around to implementing this yet");
});
Not guaranteed to work.
Another tactic would be something like:
class UnittestManager {
static void registerCurrentTest (string name) {}
static void endTest (bool success) {}
static bool performTest () {}
}
template Unittest (string _name, alias _dg) {
unittest {
UnittestManager.registerCurrentTest(_name);
// This lets us skip the test if we're just trying
// to find out what tests there are currently.
if (UnittestManager.performTest) {
scope(success) UnittestManager.endTest(true);
scope(failure) UnittestManager.endTest(false);
_dg();
}
}
}
mixin Unittest!("my test name", { assert (false, "not yet implemented"); });
More information about the Digitalmars-d
mailing list