[racket] Checking for exceptions in RackUnit

From: David Van Horn (dvanhorn at ccs.neu.edu)
Date: Mon Jul 30 15:16:55 EDT 2012

On 7/30/12 3:13 PM, Gregory Woodhouse wrote:
> Okay, here's another question related to my little Sudoku project. Before I decided to switch to using rackunit for runit tests, I had a unit test that
> looked like this
>
> (define (test3)
>    (let
>        ([val 'fail]
>         [g (new grid%)])
>      (with-handlers ([exn:fail? (lambda (exn) (set! val 'pass))])
>        (send g set-cell! 1 1 1)
>        (send g set-cell! 1 2 1))
>      val))
>
> The idea is that setting cells (1, 1) and (1, 2) to 1 is a duplicate and raises an error. This works. But this does not
>
> (test-begin
>   (define x (new grid%))
>   (check-exn exn:fail?
>              (send x set-cell! 1 1 1)
>              (send x set-cell! 1 2 1)))
>
>
> When I run the tests, I get
>
> Welcome to DrRacket, version 5.2.1 [3m].
> Language: racket/base; memory limit: 128 MB.
> --------------------
> ERROR
> . . error: duplicate
>
> --------------------

check-exn should take a thunk as the second argument.  I think you want:

(test-begin
  (define x (new grid%))
  (check-exn exn:fail?
             (lambda ()
               (send x set-cell! 1 1 1)
               (send x set-cell! 1 2 1))))

David



Posted on the users mailing list.