如何替换命名空间中的函数
How to replace a function in a namespace?
我正在为一个使用调度器的模块编写一些单元测试。我正在写一个假的调度器,这样我就可以检查哪些事件已经被安排、取消等。
我正在测试的代码在using namespace X
调用的帮助下直接调用schedule函数,最后的调用是scheduler::schedule()
。所以,我需要让我的fake的函数成为那个函数调用时调用的函数。
我不能更改库,我想我需要做的是覆盖命名空间中的函数,但我不确定应该如何做到这一点。最重要的是,调度器在其他地方实现,并通过using namespace
调用导入到该代码项目中,库实现在每个命名空间嵌套级别都有几个不同的using namespace X
调用,"以实现向后兼容性">
我该怎么做?
基本上,我们有这个:
namespace ndn {
namespace util {
namespace scheduler {
class Scheduler
{
EventId
schedule();
}
} // scheduler
} // util
} // ndn
然后在我的本地代码库中:
namespace nfd {
namespace scheduler {
using ndn::Scheduler;
EventId
schedule();
} // scheduler
} // nfd
现在,我正在写的代码看起来像:
namespace nfd {
namespace rib {
scheduler::schedule(...);
} // rib
} // nfd
所以,我需要的是给scheduler::schedule()
打电话,以换取我的假货。在我的测试用例中,我有:
namespace nfd {
namespace rib {
namespace tests {
//test code
} // tests
} // rib
// Can I do this?
namespace scheduler {
EventId
fakeSchedule();
} // scheduler
} // nfd
我可以直接内联另一个命名空间调用并覆盖那里的调用吗?如果没有,我应该如何伪造调度程序才能完成这项工作?
它不是那样工作的。您不能"覆盖命名空间中的函数"。
您可以使用相同的函数编写一个假调度器,并在构建单元测试时将被测模块与假调度器而不是实际调度器链接。
否则,如果不更改测试中的代码,就无法在C++中做到这一点。
相关文章:
- 在命名空间中定义函数还是限定函数
- CUDA内核和数学函数的显式命名空间
- 在命名空间中使用全局命名空间中的函数
- 是否可以将函数导入命名空间,但不能导出它?
- 使用另一个命名空间中的函数C++
- Visual Studio 无法解决类和命名空间中重载的明确函数
- 命名空间更改函数定义
- C++命名空间中调用 void 函数的错误
- C++ 17 个友元函数声明和内联命名空间
- MFC 函数来自 :: 命名空间?
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 在头文件中添加命名空间函数
- 命名空间函数的多重定义
- 在多个 cpp 文件中重用未命名的命名空间函数
- 如何正确声明命名空间函数
- 使用 libclang 解析命名空间函数
- C++命名空间函数
- 内联命名空间函数时出错
- 递归std::functional与递归匿名命名空间函数.使用哪一个
- 如何在命名空间函数中使用pragma weak