测试驱动开发只是意味着您首先从测试模式开始编写代码,然后构建功能直到它通过测试.这同样适用于任何编程范例:结构化/程序化,面向对象,功能性 - 可以测试任何可以输入和输出的内容.
我认为TDD根本不限于OO.
试试Unity&CMock框架.
来自他们wiki的一个例子:
void test_ShowSomeSillyExamples(void)
{
TEST_ASSERT_NOT_EQUAL(0, -1);
TEST_ASSERT_EQUAL_INT(1, 1);
TEST_ASSERT_EQUAL_HEX16(0x1234, 0x1234);
TEST_ASSERT_EQUAL_STRING("These Are The Same", "These Are The Same");
TEST_ASSERT_BITS(0x1111, 0x5555, 0x7175);
TEST_ASSERT_INT_WITHIN(5, 100, 102);
}
Run Code Online (Sandbox Code Playgroud)
请参阅:http://sourceforge.net/apps/trac/embunity/wiki
一本书:
http://www.pragprog.com/titles/jgade/test-driven-development-for-embedded-c
关于这个东西的雅虎小组:
http://tech.groups.yahoo.com/group/AgileEmbedded/
如果你在C中做TDD,你需要用C编写测试吗?我可能会用C语言编写生产代码,使用Google的gtest编写C++测试.
正如其他人所指出的,TDD本身并不依赖于OOP.但是,在实践中,它与模块化有关.每个单元测试应该只测试程序的一个非常有限的部分,所以如果你有很多全局状态,几乎不可能对程序进行单元测试.
绝对可以用C编写模块化程序,但它需要不同的技术.TDD可能会强迫您编写模块化程序,但如果您不习惯编写模块化C程序,它也可能会使您的开发工作停滞不前.