上下文
我们一直面临的一个问题是对我们的市场数据应用进行单元测试。这些应用程序坐下来观察从源中检索的数据并执行某些操作。一些难以触发的关键事件很少发生,并且测试人员很难在所有情况下验证我们的应用程序是否正确执行,因此我们必须依赖于单元测试。
这些系统通常通过在事件发生时发出回调(进入我们的应用程序),然后我们的任务来解决这个问题。
解决方案我设想:
是否可以嵌入Python或扩展(不是100%清楚),以便测试人员可以启动Python REPL并发出类似于回调的函数调用,然后由我们的C ++类处理。在运行时对我们的对象进行某种形式的动态操作。
答案 0 :(得分:7)
我在我的一个项目中做了类似的事情,使用SWIG为C ++代码的相关部分生成python绑定。然后我按照其他人的建议嵌入了翻译。完成后我可以随意执行python代码(例如PyRun_SimpleString
),它可以访问C ++代码。通常我最终使用类似Singleton的东西来更容易地从python访问特定的C ++对象。
还值得一提的是swig python模块中的directors,它允许更直观地处理虚拟函数。根据您正在做的事情,您可能会发现这些非常有帮助。
答案 1 :(得分:4)
你想做的事情是可能的,尽管不是很容易做对。听起来你想要嵌入(而不是扩展)Python。这两个主题都在教程here中介绍。
从C ++类映射到Python类有很多工作,并且有许多方法可能会以微妙的方式出错,尤其是内存泄漏和多线程(如果现有代码是多线程的)。但是,如果它仅用于测试情况并且稳定性不是关键任务,那么它可能不是一个问题。
答案 2 :(得分:3)
是的,有可能。有关具体方法,请参阅this。