Tag: unit testing

C的unit testing框架

可能重复: unit testingC代码 我已经看到了一些特定于C ++的问题,但我真的好奇C.我正在尝试在我们的构建环境中添加一个标准的unit testing框架。 我的主要目标是鼓励我们的开发人员编写unit testing,并将这些测试标准化,以便其他人可以运行它们。 理想情况下,我想将unit testing作为我们每晚构建的一部分。 我们开始使用CUnit进行一些工作,除了一切都在一个线程中运行并且任何内存故障导致unit testing停止运行之外,它起作用了,这很烦人。 我还发现编写测试非常困难,但这可能只是对您进行unit testing。 有人知道好的替代品吗? 有没有人对使用C-only代码的C ++unit testing人员有任何经验?

如何对涉及IO的c函数进行unit testing?

我在将unit testing写入涉及IO操作的C函数时面临问题。 例如,下面是我编写的代码,用于从控制台获取用户的输入字符串。 我不知道如何使用getchar()函数自动测试用户输入。 char * GetStringFromConsole() { char *strToReturn = NULL; int len = 128; strToReturn = (char*)malloc(len); if (strToReturn) { int ch; char *ptr = strToReturn; int counter = 0; for (; 😉 { ch = getchar(); counter++; if (counter == len) { strToReturn = realloc(strToReturn, len*=2 ); ptr = strToReturn + counter-1; […]

我们如何在va_list上应用非vararg函数?

背景故事 我将QuickCheckunit testing框架移植到C(参见GitHub上的工作代码)。 语法将是: for_all(property, gen1, gen2, gen3 …); 其中property是要测试的函数,例如bool is_odd(int) 。 gen1 , gen2等是为property生成输入值的函数。 有些生成整数,有些生成字符,有些生成字符串,等等。 for_all将接受具有任意输入的函数(任意数量的参数,任何类型的参数)。 for_all将运行生成器,创建测试值以传递给属性函数。 例如,属性is_odd是一个类型为bool f(int)的函数。 for_all将使用generate来创建100个测试用例。 如果属性为其中任何一个返回false,则for_all将打印有问题的测试用例值。 否则, for_all将打印”SUCCESS” 。 因此for_all应该使用va_list来访问生成器。 一旦我们调用生成器函数,我们如何将它们传递给属性函数? 例 如果is_odd的类型为bool f(int) ,我们如何实现具有以下语法的函数apply() : apply(is_odd, generated_values); 次要问题 见SO 。 我们如何智能地打印失败测试用例的任意值? 一个测试用例可能是一个整数,或两个字符,或一个字符串,或者上面的某些组合? 我们不会提前知道是否使用: printf(“%d %d %d\n”, some_int, some_int, some_int); printf(“%c\n” a_character); printf(“%s%s\n”, a_string, a_struct_requiring_its_own_printf_function);

失败的malloc()的unit testing

unit testing涉及失败的malloc()代码路径的最佳方法是什么? 在大多数情况下,它可能并不重要,因为你正在做类似的事情 thingy *my_thingy = malloc(sizeof(thingy)); if (my_thingy == NULL) { fprintf(stderr, “We’re so screwed!\n”); exit(EXIT_FAILURE); } 但在某些情况下,除了死亡之外你还有其他选择,因为你已经为缓存或其他任何东西分配了一些额外的东西,你可以收回那些记忆。 但是,在那些您可以尝试从失败的malloc()中恢复的情况下,您在代码路径中执行的操作非常棘手且容易出错,这使得测试变得尤为重要。 你是怎么做到这一点的?

如何在普通C中编写unit testing?

我已经开始深入研究GLib文档并发现它还提供了一个unit testing框架。 但是你怎么能用程序语言进行unit testing呢? 还是需要在C中编写OO?

嵌入式硬件测试自动化

有没有人成功地直接在嵌入式硬件上进行测试? 具体来说,我正在考虑为硬件层模块自动化一系列unit testing。 我们需要对硬件层代码更有信心。 我们的很多项目都使用中断驱动的定时器,ADC,串行io,串行SPI器件(闪存)等。 这甚至值得努力吗? 我们通常针对: 处理器:8位或16位微控制器(某些DSP产品) 语言:C(有时是c ++)。

使用谷歌模拟C代码

我正在维护用C编写的遗留项目,并且使用C ++编译器运行它是不可行的。 由于代码是交叉编译的,因此可以在主机环境中运行unit testing或类似操作。 因此,它也可以与C ++主机编译器连接,并使用google-test和google-mock。 谷歌模拟的某些function似乎非常诱人用于测试,如调用实际实现和设置调用期望。 我希望能够在C代码中使用它们。 我可以看到,确实可以在不使用vtable的情况下使用google-mock,但它需要模板。 有没有办法用google mock模拟裸C函数?