[racket] Help with exception raising and testing

From: George Rudolph (rudolphg1 at citadel.edu)
Date: Wed Aug 28 12:51:44 EDT 2013

They are not beginners in the sense that they have had 3 semesters of Java.
However, they are beginners in that they are new to Racket.

I have previously used the Racket teaching languages, and just wanted to try out rackunit.
Thank you for the advice.


-----Original Message-----
From: Matthias Felleisen [mailto:matthias at ccs.neu.edu] 
Sent: Tuesday, August 27, 2013 8:11 PM
To: George Rudolph
Cc: users at racket-lang.org
Subject: Re: [racket] Help with exception raising and testing

If your students are beginners, I urge you to use teaching languages in DrRacket instead. Like the language itself, the testing framework is adapted for beginners to avoid basic complexities, such as those below. For example, 

 (check-error (f 10) "error") 

is all you need to test a function/method f that may raise an error with message "error". 

If your students are advanced, I think that lambda is easier for exn-s than Java's jUnit constructions. Nevertheless I agree that testing exns could be done in syntactically much much much simpler way in a language with the richest system of syntax extensions. 

-- Matthias

On Aug 27, 2013, at 7:48 PM, George Rudolph wrote:

> I understand the idea of refactoring code to make it testable.
> I very much appreciate the clarification on usage. Thank you.
> But...
> As I see it, this approach to testing code is beyond counterintuitive, 
> at least at first glance.  It takes a moment to realize that wrapping 
> the test call in a lambda definition or a thunk is basically creating 
> a delayed unit of computation. Not something I want to teach my 
> students about during the first week of class, I think.
> What I intend to do is require them to unit test their code before they submit it.
> I have never used rackunit before, so I thought I would give it a try before I make them use it.
> IS testing really this complex, or am I missing some larger idea here?
> George
> -----Original Message-----
> From: Asumu Takikawa [mailto:asumu at ccs.neu.edu]
> Sent: Tuesday, August 27, 2013 4:35 PM
> To: George Rudolph
> Cc: users at racket-lang.org
> Subject: Re: [racket] Help with exception raising and testing
> On 2013-08-27 14:33:54 -0400, George Rudolph wrote:
>>   #lang racket
>>   (require rackunit "mybasic.rkt")
>>   (test-exn "negative coin" negative? (sum-coins -1 3 5 7) )
> There is a common mistake here that myself and other Racket programmers frequently make. The various rackunit functions that deal with exceptions take a *thunk* that contains the code to run.
> So `(sum-coins -1 3 5 7)` should be `(λ () (sum-coins -1 3 5 7))` or `(thunk (sum-coins -1 3 5 7))`.
> In addition, the test predicate should take an exception value so `negative?` won't work. You probably want a predicate like `(λ (e) (regexp-match #rx"negative?" (exn-message e)))` instead.
> Cheers,
> Asumu
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users

Posted on the users mailing list.