gpt4 book ai didi

c - 如何用纯 C 编写单元测试?

转载 作者:太空狗 更新时间:2023-10-29 16:27:25 24 4
gpt4 key购买 nike

我已经开始深入研究 GLib文档并发现它还提供了一个单元测试框架。

但是如何用过程语言进行单元测试呢?还是需要在 C 中编写 OO 程序?

最佳答案

单元测试只需要“切面”或可以进行测试的边界。测试不调用其他函数或仅调用也被测试的其他函数的 C 函数非常简单。这方面的一些示例是执行计算或逻辑运算的函数,并且本质上是函数式的。功能是指相同的输入总是产生相同的输出。测试这些功能可以带来巨大的好处,即使它只是通常被认为是单元测试的一小部分。

更复杂的测试,例如使用模拟或 stub 也是可能的,但它并不像在更动态的语言中那样容易,甚至不像 C++ 这样的面向对象的语言。解决这个问题的一种方法是使用#defines。这方面的一个例子是这篇文章,Unit testing OpenGL applications ,它展示了如何模拟 OpenGL 调用。这允许您测试是否进行了有效的 OpenGL 调用序列。

另一种选择是利用弱符号。例如,所有 MPI API 函数都是弱符号,因此如果您在自己的应用程序中定义相同的符号,您的实现将覆盖库中的弱实现。如果库中的符号不​​弱,您将在链接时遇到重复符号错误。然后,您可以实现整个 MPI C API 的有效模拟,这使您可以确保正确匹配调用,并且没有任何可能导致死锁的额外调用。也可以使用 dlopen()dlsym() 加载库的弱符号,并在必要时传递调用。 MPI 实际上提供了强大的 PMPI 符号,因此没有必要使用 dlopen() 和 friend 。

您可以体会到 C 单元测试的许多好处。它稍微难一些,并且可能无法获得与用 Ruby 或 Java 编写的东西所期望的相同级别的覆盖率,但这绝对值得做.

关于c - 如何用纯 C 编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com