[gambit-list] test driven development

Will Farr wmfarr at gmail.com
Thu Aug 18 15:45:22 EDT 2005


If the function references read-line as a top-level binding, you might
get away with a macro (I guess I've got macros on the brain) like:

(with-stub-bindings ((read-line (lambda () 'do-nothing))
                     (display (lambda (x) 'do-nothing)))
  'run-test)

which expands into:

(let ((store-rl (gensym))
      (store-display (gensym)))
  `(dynamic-wind
       (lambda ()
         (set! ,store-rl read-line)
         (set! ,store-display display))
       (lambda () 'run-test)
       (lambda ()
         (set! read-line ,store-rl)
         (set! display ,store-display))))

This is like the parameterize macro of PLT (and maybe Gambit?).  It
seems a lot cleaner than requiring that functions you want to stub to
be arguments.  (Of course, it's dirty as hell in the sense that it's
unhygienic :).

Will


On 18 Aug 2005 21:31:33 +0200, Thomas Hafner <thomas at hafner.nl.eu.org> wrote:
> Are there any tools helping me doing TDD using Gambit-C?
> 
> I've found Neil Van Dyke's Testeez. But it doesn't seem to support
> stubs. I think there is the need, that a function under test may call
> a stub (belonging to the test environment) rather than the original
> function. E.g. it may be a good idea to stub read-line, otherwise the
> test wouldn't be automatical. I can even think about situations where
> it may usefull to stub functions which are part of the software to be
> tested, at least for a part of the tests: e.g. if the original
> function isn't stateless and it's difficult to get to a rare state.
> Then a stub representing that state is easier to deal with.
> 
> Maybe I shouln't look for tools, but on ways how to write code, that
> can be tested easier. Programming in a functional way seems to be
> better there, but what to do then with non-functional functions like
> read-line? (I call it ,,non-functional`` because it can return
> different values although the argument list keeps being the same, i.e.
> the emptry one.)
> 
> Just an idea: problematic functions (like read-line above) are passed
> explicitely as function arguments rather than being referenced
> directly. When testing, I'm free to pass a stub instead of the
> original function read-line. Is that good?
> 
> Regards
>   Thomas
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> http://mailman.iro.umontreal.ca/mailman/listinfo/gambit-list
>


More information about the Gambit-list mailing list