Re: g_assert_handler for unit-tests
- From: Michael Natterer <mitch gimp org>
- To: Stefan Kost <kost imn htwk-leipzig de>
- Cc: gtk-devel-list gnome org
- Subject: Re: g_assert_handler for unit-tests
- Date: Wed, 20 Oct 2004 17:18:09 +0200
Stefan Kost <kost imn htwk-leipzig de> writes:
> hi hi,
>
> we extensivly use g_assert() as API precondition checks in our project. Further
> we have a bunch of unit tests based on check [1].
> When one writes unit tests this included trying to misuse the API (e.g. passing
> NULL pointers and the like). Now if there api entry that is checked is still
> buggy, the tessts e.g. crash and therewith the unit-testing framework considers
> this as a failed test. When the developer now fix the function by assing some
> g_asserts() the unit test still fails, as the programm now exits().
>
> Next I would like to outline a solution for the probelm. I don't have commit
> regith to gnome CVS, so if there is agreement I will also provide a patch for it.
>
> As a solution I suggest to introduce a g_assert_handler(). The default
> g_assert_handler will call exit() and will be installed by glib on init().
> An application could then use a new API entry g_set_assert_handler() to install
> a new handler and to store the old handle so that later it can be restored.
> The assert_handler gets
> a) the log-message as the only argument
> -or-
> b) file,line,func,expr,... as separate args.
>
> In the unit test we could install our own assert-handler. That even allows to
> verify wheter the tested module has handled the wrong arg (by checking func).
>
> What do you thing about it? Is it all nonsesnse and is there an easier way? How
> do you handle such things?
Just don't use g_assert() for precondition checks.
Use g_return_[val_]_if_fail() instead and control the fatality of
the warnings it issues with g_log_set_fatal_mask() or
g_log_set_always_fatal().
Also look at gmessages.h to see how to install log handlers for
messages of any severity.
ciao,
--mitch
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]