On Mar 4, 2011, at 5:11 AM, Neil Van Dyke wrote:

> Could someone explain the advantages of having, say, the "test-suite" form 
> produce a data structure to be supplied to test-runner code... rather than 
> having evaluation of the "test-suite" form result in the tests actually being 
> executed?


In my latest project, I have arranged things like this: 

 module_i.rkt : includes all code for some data representation and its 
functionality, 
        plus test suites, usually several of them one per functionality 
        or one per important interaction between two pieces of functionality 
        
        I use define/provide-test-suite to formulate the test suites
        *after* I have developed the code. During the initial code 
        development, I stick to plain check-* test cases. 

 Tests/module_i.rkt : once I have a stable module, I move the run-tests 
        expressions to a separate module in a test directory. Not the 
        test suites, which stay with module, just the run test suites 
        thingies, e.g., 

        #lang racket 
        (require racket/require (path-up "board3.rkt") rackunit 
rackunit/text-ui rackunit/gui) 
        
        (define board-test
          (make-test-suite "testing the board" 
             (list --side
                   --board-draw
                   --board-ref
                   --board-set
                   --board-init
                   --board-place-piece?
                   --board-score
                   --board-put
                   --board-connectable
                   --serialize))) 

        (run-tests board-test) 

When I have to do anything on module_i.rkt, I open both the module and its  
pendant in Tests. A change in the former means I run the latter. 

What do I get from this: 

1. I like to formulate tests in the context of the function definition. 
I prefer reading things that way. 

2. I do not run the tests when I load the module. I run them only when I test. 

3. I don't have to export all the 'private' functions from the module. 
(I know I can get there anyway, but I find this bad.) 

-- Matthias






_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to