hgyxbll / zCUT

C Unit Test Framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

zCUT ---- C Unit Test Framework

https://github.com/zBaitu/zCUT

Make, Install, Use

make and install

mkdir build
cd build
cmake ..
make
make install

use

gcc ut.c -lzcut_main
gcc ut_main.c -lzcut

There are 2 static lib, libzcut.a and libzcut_main.a.
libzcut_main.a contains default main implementation, which in lib/zcut_main.c.

Test Structure

There are 3 macro:
TEST_CASE(case_name)
TEST_SUITE(suite_name)
TEST_RUNNER(ut_name)

#include <zcut.h>

TEST_CASE(test_case_name0)
{
    ...     /* Test body, assertion are here. */
}
TEST_CASE(test_case_name1)
{
    ...
}

TEST_SUITE(test_suite_name0)
{
    test_case_name0,
    test_case_name1,
    TEST_NULL
};

TEST_RUNNER(test_runner_name)
{
    test_suite_name0,
    TEST_NULL
};

Test case register in test suite, and test suite register in test runner.
DO NOT FORGET TEST_NULL in TEST_SUITE and TEST_RUNNER.
DO NOT FORGET ; after TEST_SUITE and TEST_RUNNER.

There are another 3 macro pairs:
CASE_SETUP(suite_name)
CASE_TEARDOWN(suite_name)
SUITE_SETUP(suite_name)
SUITE_TEARDOWN(suite_name)
RUNNER_SETUP()
RUNNER_TEARDOWN()

/* Be called before/after every case of this suite */
CASE_SETUP(test_suite_name0)
{
    ...
    return (is_successed) ? true : false;
}
CASE_TEARDOWN(test_suite_name0)
{
    ...
    return (is_successed) ? true : false;
}

/* Be called before/after this suite */
SUITE_SETUP(test_suite_name0)
{
    ...
    return (is_successed) ? true : false;
}
SUITE_TEARDOWN(test_suite_name0)
{
    ...
    return (is_successed) ? true : false;
}

/* Be called before/after ut */
RUNNER_SETUP()
{
    ...
    return (is_successed) ? true : false;
}
RUNNER_TEARDOWN()
{
    ...
    return (is_successed) ? true : false;
}

If XXX_SETUP() return false, the runner/suite/case will not be executed.

Assertion

Assertion prototype is:
[EXPECT|ASSERT]_[TYPE]_COMPARE(actual[, expected, user_msg...])

/* boolean assertion */
EXPECT_TRUE
EXPECT_FALSE

/* number assertion */
EXPECT_EQ   /* equal */
EXPECT_NE   /* unequal */
EXPECT_LT   /* less than */
EXPECT_LE   /* less or equal */
EXPECT_GT   /* greater than */
EXPECT_GE   /* greater or equal */

/* string assertion */
EXPECT_STR_EQ
EXPECT_STR_NE
EXPECT_STR_LT
EXPECT_STR_LE
EXPECT_STR_GT
EXPECT_STR_GE

/* string assertion, ignore case */
EXPECT_STR_IC_EQ
EXPECT_STR_IC_NE
EXPECT_STR_IC_LT
EXPECT_STR_IC_LE
EXPECT_STR_IC_GT
EXPECT_STR_IC_GE

The difference between EXPECT and ASSERT is: When ASSERT failed, it will exit test case directly, code after ASSERT will not execute.

The user_msg parameter in assertion is like format in printf. You can add more test msg, it will print when case failed. For example:
EXPECT_EQ(0, 1, "error here:%d, %d", 0, 1);

Execution

There are some command options:

Usage: test_bin [-bC] [-fF FILTER_EXPRESSION] [-Hkl] [-r REPEAT_COUNT] [-s] [-x [XML_PATH]] [-hv]
  -b, --break-on-failure           Exit unit test when a assertion failed.
  -C, --no-color                   Disabled colored output. Default is enabled.
  -f, --case-filter                Choose test case to run with simple regular expression.
  -F, --suite-filter               Choose test suite to run with simple regular expression.
  -H, --highlight                  Enable highlighted output. Default is disabled.
  -k, --keep-going                 When repeat count is larger than 0, keep unit test going when error occur.
  -l, --list                       Just list out all the test suite and test case instead of running them.
  -r, --repeat                     Run unit test for a repeat count, in range [0, INT_MAX].
  -R, --no-filtered-out-result     Do not output filterd out case or suite result.
  -s, --shuffle                    Randomize the order of test suite and test case.
  -x, --xml-path                   Generate an XML report with detail informaion of the unit test.
  -h, --help                       Display this help and exit.
  -v, --version                    Display version and exit.

There are env parameters corresponding to command options:

-b  UT_BREAK_ON_FAILURE
-C  UT_NO_COLOR
-f  UT_CASE_FILTER
-F  UT_SUITE_FILTER
-H  UT_HIGHLIGHT
-k  UT_KEEP_GOING
-l  UT_LIST
-r  UT_REPEAT
-R  UT_NO_FILTERED_OUT_RESULT
-s  UT_SHUFFLE
-x  UT_XML_PATH

MISC

For more detail, please see tests/test_XXX.c for demo.
Sample result output:
sample result

About

C Unit Test Framework


Languages

Language:C 98.5%Language:CMake 1.5%