[racket] rackunit vs test-engine

From: Joe Gilray (jgilray at gmail.com)
Date: Wed Aug 8 16:18:20 EDT 2012

Thanks Matthias,

Is there an easy way to "internally" time the duration of all tests?  with
test-engine I could use (time (test)), with all the tests in a test
submodule do I have to do the timing externally?  I.e "TimeThis raco test
myfile.rkt"?

-Joe

On Wed, Aug 8, 2012 at 6:31 AM, Matthias Felleisen <matthias at ccs.neu.edu>wrote:

>
> This first example shows how to use module+ test with test-engine:
>
> #lang racket
>
> (module+ test
>   (require test-engine/racket-tests))
>
> ;; Int -> Int
> ;; adds 2 to n
>
> (module+ test ;; setting up examples before you define the function
>   (check-expect (add2 3) 4)
>   (check-expect (add2 3) 5))
>
> (define (add2 n)
>   (+ n 3))
>
> (module+ test
>   (test)) ;; calling this function controls when you run the 'test suite'
>
> All you need to know is that drracket requires submodules named test when
> you run the program, though this default can be changed via the language
> preference (see submodules to run, drop down menu). At the command line,
> racket test foo.rkt will require the test submodules but otherwise they are
> not run.
>
> ;; ---
>
> This second example translates the first to rackunit:
>
> #lang racket
>
> (module+ test
>   (require rackunit))
>
> ;; Int -> Int
> ;; adds 2 to n
>
> (module+ test
>   (check-equal? (add2 3) 4)
>   (check-equal? (add2 3) 5))
>
> (define (add2 n)
>   (+ n 2))
>
> The tests are always run when you require the test submodule (see above).
>
> ;; ---
>
> With rackunit, you can also define test-suites (see docs, especially
> define/provide-test-suite. You compose these test suites, provide them, and
> run them if and when you wish by loading the proper module.
>
> Please search for an earlier post of mine where I explain a specific
> arrangement of separate modules to make all of this convenient.
>
> With submodules, you can stick these test suites into submodules and
> require those in some global test module.
>
> -- Matthias
>
>
>
>
>
> On Aug 7, 2012, at 10:31 PM, Joe Gilray wrote:
>
> Hi Matthias,
>
> I will take you up on your offer of an example... thanks!
>
> I've read about test-suite and test-case, but I'm not sure of the best way
> to test each utility in a file.
>
> Ideally the tests would be grouped with the functions:
>
> (define f1 ...)
> (module+ test
>   (test-equal? "f1-tests" (f1 1 2) 1)
>   (test-equal? "f1-tests" (f1 3 4) 4))
>
> (define f2 ...)
> (module+ test
>   (test-equal? "f2-tests" (f2 1 2) 1)
>   (test-equal? "f2-tests" (f2 3 4) 4))
>
> etc.
>
> I believe that the above scheme would work and run every time the
> enclosing file/module is run... right?
>
> What if I want to control when all the tests are run?  Can I somehow build
> a trigger to fire off all the tests?  From the docs it looks like this is
> the purpose of test-suite, but I don't know the mechanics when the test
> cases are spread out in the file... maybe that isn't allowed and I will
> need to group the tests?
>
> Thanks again,
> -Joe
>
> On Tue, Aug 7, 2012 at 6:00 PM, Matthias Felleisen <matthias at ccs.neu.edu>wrote:
>
>>
>> On Aug 7, 2012, at 8:24 PM, Joe Gilray wrote:
>>
>> > Now that 5.3 is out, I've been reading about submodules and their
>> support for testing.  In the past I used test-engine/racket-tests for
>> testing.
>> >
>> > Can someone please give me a rundown of when to use rackunit and
>> advantages/disadvantages of test-engine and rackunit?
>>
>> -- test-engine provides test support for the teaching languages of
>> DrRacket.
>> -- rackunit is for 'adult' programmers, meaning programmers who have
>> outgrown teaching languages.
>>
>> You can still use test-engine in plain #lang racket, and you could use
>> rackunit in teaching languages.
>>
>> You can also use both with submodules especially (module+ test ...).
>> Holler if you need examples -- Matthias
>>
>>
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120808/b7263e4c/attachment-0001.html>

Posted on the users mailing list.