caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] OUnit usage
@ 2003-02-21  4:00 mgushee
  2003-02-21  8:24 ` Maas-Maarten Zeeman
  0 siblings, 1 reply; 2+ messages in thread
From: mgushee @ 2003-02-21  4:00 UTC (permalink / raw)
  To: caml-list

Hello, all--

This probably qualifies as a dumb question, but I hope you will indulge my curiosity.

I would like to try OUnit. I haven't done much formal unit testing, and am also fairly 
new to OCaml, but since I want to develop a serious software package I guess it's 
time to get serious about testing. Anyway, I am having a little trouble understanding 
how to construct a test. The main point of confusion is the TestCase constructor. 
The OUnit docs say:

  type test =
  | TestCase of (unit -> unit)
  | TestList of test list
  | TestLabel of string * test

I would like to know what sort of arguments to give TestCase. The examples 
provided don't mean much to me:

  TestCase (fun _ -> ())

This looks like syntactically correct but meaningless code, no?

If I could see 1 or 2 simple but realistic examples, I think that would clear up the 
mystery.

All suggestions appreciated.

--
Matt Gushee
Englewood, CO USA
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Caml-list] OUnit usage
  2003-02-21  4:00 [Caml-list] OUnit usage mgushee
@ 2003-02-21  8:24 ` Maas-Maarten Zeeman
  0 siblings, 0 replies; 2+ messages in thread
From: Maas-Maarten Zeeman @ 2003-02-21  8:24 UTC (permalink / raw)
  To: mgushee; +Cc: caml-list

Hello,

>If I could see 1 or 2 simple but realistic examples, I think that would clear up the 
>mystery.
>  
>
Indeed I admid, the documentation is currently not very helpful, but I 
did not want to wait to release the software until it was. Maybe this is 
a good trigger to start working on it, but don't hold your breath until 
it is finished. I'm currently very busy with other (not ocaml related) 
stuff. If you are brave enough however, you could take a look test code 
in the OUnit distribution itself. The OcamlExpat distribution also 
contains some real live test examples, which might already be helpful.

To clarify things (a bit) more:

The basic idea of a TestCase is that it contains a function, which is 
executed at test time. When the function executes without any exceptions 
it was successful, when the function raises Failure, it is flagged as 
being failed, and when some other exception is raised it has errored.

Now a small (realistic?) example

open OUnit

let empty_list = []
let list_a = [1;2;3]

let test_list_length _ =
  assert_equal 0 (List.length empty_list);
  assert_equal 3 (List.length list_a)
    (* etc, etc *)

let test_list_append _ =
  let list_b = List.append empty_list [1;2;3] in
  assert_equal list_b list_a

let suite = "OUnit Example" >::: ["test_list_length" >:: test_list_length;
                  "test_list_append" >:: test_list_append]
let _ =
  let verbose = ref false in
  let set_verbose _ = verbose := true in
  Arg.parse
    [("-verbose", Arg.Unit set_verbose, "Run the test in verbose mode.");]
    (fun x -> raise (Arg.Bad ("Bad argument : " ^ x)))
    ("usage: " ^ Sys.argv.(0) ^ " [-verbose]");
  if not (was_successful (run_test_tt ~verbose:!verbose suite)) then
    exit 1

Which can be compiled as follows:

$ ocamlc -o example unix.cma oUnit.cmo example.ml

And run like this:

$ ./example -verbose
OUnit Example:0:test_list_length ... ok
OUnit Example:1:test_list_append ... ok
Ran: 2 tests in: 0.00 Seconds
OK

When something is wrong you will see the following:

$ ./example -verbose
OUnit Example:0:test_list_length ... FAIL
OUnit Example:1:test_list_append ... ok
======================================================================
FAIL: OUnit Example:0:test_list_length

OUnit: not equal
----------------------------------------------------------------------
Ran: 2 tests in: 0.00 Seconds
FAILED: Cases: 2 Tried: 2 Errors: 0 Failures: 1

I hope this was helpful. If you are eager to learn more, I would like to 
refer you to the original unit test article made by Kent Beck, 
http://www.xprogramming.com/testfram.htm. The article describes the unit 
test philosophy, and a smalltalk implementation of a unit test 
framework. Much of it holds for OUnit.

Regards,

Maas

 

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-02-21  8:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-02-21  4:00 [Caml-list] OUnit usage mgushee
2003-02-21  8:24 ` Maas-Maarten Zeeman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).