DUnit - class MyTest { mixin TestMixin; void testMethod1() {} void testMethod2() {}}

Shripad K assortmentofsorts at gmail.com
Wed Aug 29 12:20:21 PDT 2012


How do I test callbacks/delegates which are not triggered 
immediately? Especially when I need to do unit tests with an 
event loop?
A simple example from my codebase (SaaSy here is a custom HTTP 
client to an API endpoint):

class TestSaaSy {
     mixin TestMixin;

     // this works
     void test_encoded_auth() {
         auto ev = new EventLoop;
         auto saasy = new SaaSy(ev, "test", "test");
         assert(saasy.encoded_auth == "dGVzdDp0ZXN0dGVzdA==", 
"encoding issue");
         ev.close;
         ev.run;
     }

     // won't work. test gets finished even before the callback is 
fired!
     void test_get_subscription() {
         auto ev = new EventLoop;
         auto saasy = new SaaSy(ev, "test", "test");
         saasy.getSubscription("ref363466", (bool err, string 
response) {
             assert(err == true);
             ev.close;
         });
         ev.run;
     }
}

On Sunday, 19 February 2012 at 15:30:33 UTC, Juan Manuel Cabo 
wrote:
> People of the D world.. I give you DUnit (not to be confused 
> with an old
> tango DUnit, this one is for >= D2.057, and doesn't really 
> require phobos or tango (just you version the few writeln's of 
> the runner, and maybe
> something else)).
>
>       https://github.com/jmcabo/dunit
>
> I've been developing it for the past few weeks, and since I saw 
> a post of another unit testing framework just a few minutes 
> ago, I thought I'd rush it to github.
>
> Soooo, here is how you define a test:
>
>
> import dunit;
>
> class Something {
>     mixin TestMixin;
>
>     void testOne() {
>         assert(1 == 1, "this works");
>     }
>
>     void testTwo() {
>         assertEquals(1, 2/2);
>         assertEquals("a string", "a"~" string");
>     }
> }
>
> .. and that's all there is to it. Put the mixin TestMixin, and 
> name your tests
> starting with 'test'. The results output shows all of them even 
> if some fail, and... guess what, it tells you the name of the 
> unit tests that failed!! isn't this awesome!! (all thanks to 
> mixins, recursive template declarations, __traits, and a little 
> bit of CTFE)... isn't D like, so incredibly awesome or what!?!?
>
> There is absolutely no overhead in registering the tests for 
> the test runner.. its all at compile time!
>
> Your tests are inherited through derived classes, and can be 
> private in the unit test class (they will still run).
>
>
> I made two test runners:
>
>     * One that shows the results in java style (but WITH 
> COLORS!! (fineprint: colors only on unix console, windows 
> console is colorless for now)
>
>     * Another one more verbose that shows the tree of tests as 
> it runs them.
>
> It is very easy to make your own.
>
>
> This is all BOOST licenced, so please tweak it away!
>
>
> FINEPRINT yes shouting fineprint ;-) haha:
> THIS IS NOT A unitest{} REPLACEMENT, JUST AN ITCH EVERY OOP 
> PEOPLE WANTED TO SCRATCH: named, easy, xUnit style unit tests.. 
> AND NOW YOU'VE GOT THEM.




More information about the Digitalmars-d-announce mailing list