如何替换命名空间中的函数?

时间:2017-01-11 23:10:29

标签: c++ namespaces

我正在为使用调度程序的模块编写一些单元测试。我写了一个假的调度程序,以便我可以检查已安排,取消等事件。

我测试的代码在using namespace X次调用的帮助下直接调用调度函数,最终调用为scheduler::schedule()。所以,我需要让我的假函数成为调用函数时调用的函数。

我无法更改库,我认为我需要做的是覆盖命名空间中的函数,但我不确定应该如何执行此操作。最重要的是,调度程序在其他地方实现,并通过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

我可以内联另一个名称空间调用并覆盖那里的调用吗?如果没有,我应该如何伪造调度程序以便完成此任务?

1 个答案:

答案 0 :(得分:0)

它不起作用。您不能“覆盖命名空间中的函数”。

您可以使用相同的函数编写一个伪调度程序,并在构建单元测试时将测试模块与伪调度程序而不是实际调度程序链接。

否则,如果不更改测试代码,就无法在C ++中执行此操作。