c - 单元测试 stub C 辅助方法

标签 c unit-testing methods helper stub

我正在寻找一种方法来删除位于同一 C 文件中的辅助方法。有没有什么方法可以在不修改源文件的情况下做到这一点?我正在考虑使用 #define 将方法 b 替换为 b_stub 方法,但我认为这最终会重命名方法b

这是一个示例用例:

#include "file.h"

a(){
    b();
}

b(){
}

我正在尝试创建一个测试框架,但我希望用户只需包含一个包含框架和 stub 定义的文件。

谢谢。

最佳答案

我不确定我完全理解你的问题。

如果您想调用与 b 不同的例程,那么您可以在编译时执行以下操作:

a() {
#ifdef USE_STUB
    b_stub();
#else
    b();
#endif
}

或者,如果您总是想调用 b 但希望 b 表现不同,您可以在编译时执行以下操作:

a() {
    b():
}
b() {
#ifdef USE_STUB
    printf( "I am in the stub version of b()\n" );
#else
    printf( "I am in the real version of b()\n" );
#endif
}

或者您可以在运行时执行类似的操作(为简单起见,此处使用全局变量进行显示):

a() {
    extern int _use_stub;
    if( _use_stub ) {
        b_stub();
    } else {
        b();
    }
}

a() {
    b();
}
b() {
    extern int _use_stub;
    if( _use_stub ) {
        printf( "This is the stub code\n" );
    } else {
        printf( "This is the real code\n" );
    }
}

通过编译时示例,您可以通过更改头文件或 Makefile 定义来来回切换。通过运行时示例,您可以使用命令行选项、环境变量、用户首选项 Pane 或其他任何内容来回切换。

关于c - 单元测试 stub C 辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882029/

相关文章:

c - 尝试使用 clock_t 但编译器之神讨厌我

c++ - 如何在 C 和 C++ 中分配和释放 *array* 内存?

iphone - 构建后如何自动运行我的 iPhone 应用程序?

java - 方法如何接收字符串作为输入并给出 int 作为输出

java - java中通过方法初始化2dim数组

c++ - memcpy 出错,长度不正确

c - 从不兼容的指针类型赋值——如何解决?

reactjs - 如何测试 React ErrorBoundary

c# - ReactiveUI:为什么在使用 TestScheduler 时必须在 "...Throttle..."中明确指定调度程序

java - java中如何给单词赋值?