2011/6/28 Matthias Felleisen <matth...@ccs.neu.edu>:
>
>
> I have come to accept that all modules should come with their tests included, 
> as an exportable test suite:
>
> -- you don't need to expose any 'private' identifiers
> -- they are next to the function they test
> -- it is easy to run them from the repl after loading the file
> -- ... and from some 'test all' file
>
> BUT, I'd like two additions:
>
> -- run the tests automatically when the file is required in a certain into 
> racket or always into DrRacket's repl
> -- if code size is a concern, racket should be able to eliminate tests
>
> That's what I asked for, and this is what Jay's patch is supposed to address 
> though I don't see how it does. Also, like Eli, I don't like the additional 
> wrappers and with-deployment looks suspicious.

My patch was supposed to address this by setting up a protocol for
code to be test only or "not" test (that's what I intended by
with-deploying.)

You'd write code like...

(define (f x) ...)

(check-equal? (f 5) 10)

and when run in "raco test" or DrRacket it would run the test, but
otherwise would only run a check to see that it wasn't in testing
mode.

I was worried about situations where you had some code that had module
toplevel code that starts up a long running process that shouldn't be
run in test mode, so I wanted to cordon off that. I wasn't imagining
anything as complicated as what Neil or Eli seem to want. (Seems like
overkill to me.)

The "test all" functionality comes from running "raco test --all" on
your main program, to test all its sub-components, rather than having
to make a new artificial testing file.

I dislike Eli's proposal because I don't think it gets tests close to
their functions with low syntactic overhead. For example...

(define (f x) ...)
(check-equal? (f 5) 10)

; 200 lines of more stuff

(define (g x) ...)
(check-equal? (g 7) 14)

becomes

(define (f x) ...)

; 200 lines of more stuff

(define (g x) ...)

(define (test)
 (check-equal? (f 5) 10)
 (check-equal? (g 7) 14))

or worse

(define (f x) ...)
(define (test-f)
 (check-equal? (f 5) 10))

; 200 lines of more stuff

(define (g x) ...)
(define (test-g)
 (check-equal? (g 7) 14))

(define (test)
 (test-f)
 (test-g))

Jay

>
> -- Matthias
>
>
>
> On Jun 28, 2011, at 8:54 AM, Neil Van Dyke wrote:
>
>> I like the "testing" part, but am uneasy with the "deploying" part.
>>
>> Unit testing is so commonplace, and sometimes you want to have unit tests of 
>> private stuff within a module, without having to break up the module to 
>> expose the private stuff for testing.  So, in that very common, almost 
>> universal situation, being able to embed unit tests in a module and have a 
>> way of switching them on and off at run time, seems good.
>>
>> Beyond that, I think that talking about modes of running gets trickier and 
>> more application-specific.  Just a knee-jerk reaction without looking at it, 
>> but hearing that there's a construct "with-deploying" sounds seems like a 
>> dumbed-down, toy thing to do.  I'd rather see an extensible mechanism for 
>> run modes instead.
>>
>> Just one example: just like some people might have mode called "deploying" 
>> or "production", I might have particular modules that have a run mode in 
>> which there are multiple implementations of the same function, and at run 
>> time both the simple and the fast-and-fancy algorithms are run and their 
>> results compared (and run modes in which only one of the two algorithms are 
>> run).  What modes I use for ``production'' might change during the 
>> development lifecycle, on a per-module basis.  I also have modes for 
>> profiling information, including reports within the system.  We also have 
>> modes in which logging is done or not, and (ideally, though Racket's logging 
>> features don't directly support this), this is on a per-module or 
>> per-something-else basis.  Some of these modes were originally intended for 
>> ``development mode'' but were put into production at times.  Whether 
>> logging, profiling, algorithm-checking, etc. are done is not limited to 
>> non-"production".
>>
>> Also, even though I just said that embedded test cases are so universal, and 
>> there is a convenience factor to being able to test unexported stuff from a 
>> module, even this mode wants to be more complicated sometimes.  For example, 
>> sometimes tests are expensive, and you want to run a smaller subset of the 
>> tests.
>>
>> --
>> http://www.neilvandyke.org/
>> _________________________________________________
>> For list-related administrative tasks:
>> http://lists.racket-lang.org/listinfo/dev
>
>
> _________________________________________________
>  For list-related administrative tasks:
>  http://lists.racket-lang.org/listinfo/dev
>



-- 
Jay McCarthy <j...@cs.byu.edu>
Assistant Professor / Brigham Young University
http://faculty.cs.byu.edu/~jay

"The glory of God is Intelligence" - D&C 93

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

Reply via email to