unit testing framework for C
是否有适用于Java和.NET的JUnit和Nunit等C的单元测试框架?
或者我们如何针对不同场景测试用C编写的一段代码?
提前致谢......
我已经使用Check进行了一些操作并且非常容易设置。它被一些像GStreamer这样的大型活跃项目所使用。这是一个简单的失败例子:
1 | fail_if (0 == get_element_position(spot),"Position should not be 0"); |
Glib有内置的测试框架:
http://library.gnome.org/devel/glib/stable/glib-Testing.html
还有cspec,这是一个非常简单易用的BDD框架。
如果你曾经使用像rspec或mocha这样的东西,它将是微不足道的。它甚至不需要你编写
这是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | context (example) { describe("Hello world") { it("true should be true") { should_bool(true) be equal to(true); } end it("true shouldn't be false") { should_bool(true) not be equal to(false); } end it("this test will fail because 10 is not equal to 11") { should_int(10) be equal to(11); } end skip("this test will fail because "Hello" is not "Bye"") { should_string("Hello") be equal to("Bye"); } end } end } |
最重要的是我为自己写的和开源的。目标是简单,并有一个干净的语法。
http://code.google.com/p/seatest/
一种基本的简单测试将是......
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include"seatest.h" // // create a test... // void test_hello_world() { char *s ="hello world!"; assert_string_equal("hello world!", s); assert_string_contains("hello", s); assert_string_doesnt_contain("goodbye", s); assert_string_ends_with("!", s); assert_string_starts_with("hell", s); } // // put the test into a fixture... // void test_fixture_hello( void ) { test_fixture_start(); run_test(test_hello_world); test_fixture_end(); } // // put the fixture into a suite... // void all_tests( void ) { test_fixture_hello(); } // // run the suite! // int main( int argc, char** argv ) { run_tests(all_tests); return 0; } |
我最后一次需要单元测试C时,我对CuTest非常满意。它只有一个.c / .h对,带有一个小的shell脚本,可自动找到构建测试套件的所有测试,并且断言错误不是完全无益。
以下是我的一个测试示例:
1 2 3 4 5 6 7 8 9 | void TestBadPaths(CuTest *tc) { // Directory doesn't exist char *path = (char *)"/foo/bar"; CuAssertPtrEquals(tc, NULL, searchpath(path,"sh")); // A binary which isn't found path = (char *)"/bin"; CuAssertPtrEquals(tc, NULL, searchpath(path,"foobar")); } |
我还是单元测试框架的新手,但我最近尝试过cut,check和cunit。这似乎与其他人的经历相反(参见上一个问题的单元测试C代码),但我发现cunit最容易开始。这对我来说似乎也是一个不错的选择,因为cunit应该与其他xunit框架很好地配合,并且我会频繁地切换语言。
好吧,只需用C替换Java中的J ...
库尼特
虽然也许CUT更通用。
最后我可能会因为我非常喜欢NetBSD而感到厌烦,但你也应该试试ATF