![]() |
![]() |
![]() |
Cutterリファレンスマニュアル | ![]() |
---|---|---|---|---|
#define cut_test_pass () #define cut_test_fail (system_message, ...) #define cut_test_fail_va_list (system_message, user_message_format) #define cut_trace (expression) #define cut_trace_with_info_expression (expression, info_expression)
読みやすいテストを書くために独自の検証を作成する必要があるでしょう。このセクションのシンボルは独自の検証を作成を補助します。
例:
my-assertions.h:
#ifndef __MY_ASSERTIONS_H__ #define __MY_ASSERTIONS_H__ #include <cutter.h> #ifdef __cplusplus extern "C" { #endif #define my_assert_equal_int(expected, actual, ...) \ cut_trace_with_info_expression( \ my_assert_equal_int_helper((expected), (actual), \ # expected, # actual, \ ## __VA_ARGS__, NULL), \ my_assert_equal_int(expected, actual, ## __VA_ARGS__)) void my_assert_equal_int (long expected, long actual, const char *expression_expected, const char *expression_actual, const char *user_message_format, ...); #ifdef __cplusplus } #endif #endif
my-assertions.c:
#include "my-assertions.h" void my_assert_equal_int(glong expected, glong actual, const gchar *expression_expected, const gchar *expression_actual, const gchar *user_message_format, ...) { if (expected == actual) { cut_test_pass(); } else { cut_test_fail_va_list( cut_take_printf("<%s == %s>\n" "expected: <%ld>\n" " actual: <%ld>", expression_expected, expression_actual, expected, actual), user_message_format); } }
Makefile.am:
AM_CFLAGS = $(GCUTTER_CFLAGS) LIBS = $(GCUTTER_LIBS) noinst_LTLIBRARIES = libmy-assertions.la libmy_assertions_la_SOURCES = my-assertions.c my-assertions.h AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined
#define cut_test_pass()
検証をパスしたらcut_test_pass()
を呼んでください。cut_test_pass()
は検証数を増やします。
1.0.5から
#define cut_test_fail(system_message, ...)
検証が失敗したらcut_test_fail()
を呼んでください。cut_test_fail()
は失敗数を増やし、現在のテストを中断します。
|
テストフレームワーク指定の失敗メッセージ。(const char *) |
|
省略可能な整形文字列。以降のパラメータが整形文字列に挿入されます。(printf() と同じ) |
1.0.5から
#define cut_test_fail_va_list(system_message, user_message_format)
cut_test_fail_va_list()
の動作についてはcut_test_fail()
を見てください。user_message_format
は可変長引数の1つ前の引数です。
例:
void my_assert(cut_boolean result, const gchar *user_message_format, ...) { if (result) { cut_test_pass(); } else { cut_test_fail_va_list("Fail!", user_message_format); } }
|
テストフレームワーク指定の失敗メッセージ。(const char *) |
|
ユーザ指定の失敗メッセージ。(const char *) |
1.0.5から
#define cut_trace(expression)
現在のファイル名、行番号、関数名、expression
を記憶し、expression
内で検証が失敗した場合に表示します。expression
の多くは関数呼び出しになるでしょう。
expression
の戻り値を取得できないことに注意してください。
cut_trace()
は以下の通りです。もし、cut_assert_not_null(object)が失敗したら、バックトレースには2行含まれます。cut_assert_not_null(object)とcreate_my_object("my-name")です。
例:
static MyObject *object; static void create_my_object(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } void test_my_object_name(void) { cut_trace(create_my_object("my-name")); cut_assert_equal_string("my-name", my_object_get_name(object)); }
テストを読みやすくするためにcut_trace()
を使ったマクロを書くかもしれません:
static MyObject *object; static void create_my_object_helper(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } #define create_my_object(...) \ cut_trace(create_my_object_helper(__VA_ARGS__)) void test_my_object_name(void) { create_my_object("my-name"); cut_assert_equal_string("my-name", my_object_get_name(object)); }
|
呼び出されたことを記録される式。 |
1.0.5から
#define cut_trace_with_info_expression(expression, info_expression)
cut_trace()
とcut_trace_with_info_expression()
の違いは記録される式がexpression
と同じかどうかです。cut_trace_with_info_expression()
はバックトレースの読みやすさのためにexpression
から情報を隠したいときに便利です。
cut_trace_with_info_expression()
の例です。cut_assert_not_null(object)が失敗すると以下の2行を含んだバックトレースが得られます:
cut_assert_not_null(object)
create_my_object_helper("my-name")ではなくcreate_my_object("my-name")
もし、cut_trace_with_info_expression()
ではなくcut_trace()
を使った場合はcreate_my_object_helper("my-name")になります。もし、create_my_object_helper("my-name")が得られたら以下のように混乱してしまうかもしれません。「create_my_object_helper("my-name")はどこからきたんだ?test_my_object_name()
はcreate_my_object("my-name")は使っているけど、create_my_object_helper("my-name")は使っていないぞ。」
例:
static MyObject *object; static void create_my_object_helper(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } #define create_my_object(...) \ cut_trace_with_info_expression( \ create_my_object_helper(__VA_ARGS__), \ create_my_object(__VA_ARGS__)) void test_my_object_name(void) { create_my_object("my-name"); cut_assert_equal_string("my-name", my_object_get_name(object)); }
|
呼び出されたことを記録される式。 |
|
呼び出されたと記録される式。 |
1.0.5から