如何在使用外部C++;应用程序编程接口? 我试图创建一个使用外部C++ API的测试环境,这样我就可以离线测试,而不必连接到实际服务。本质上,我想创建我自己的假服务,用于测试目的。但是,我希望能够轻松地在这两个环境之间进行更改,而无需更改大量代码。基本上,我希望能够在测试环境中使用外部C++ ++类。我遇到的一个问题是,由于类是外部API的一部分,所以我无法更改它们。我只能将它们包装在我创建的其他类中。我怎样才能在创建一个不需要每次来回切换大量代码的环境的同时解决这个问题?下面是一些示例代码(使用API的相关部分)。如何将下面的这些类放入测试工具中?谢谢 ... SessionOptions sessionOptions; sessionOptions.setServerHost(d_host.c_str()); sessionOptions.setServerPort(d_port); Session session(sessionOptions); if (! session.start()) { std::cerr <<"Failed to start session." << std::endl; return; } if (! session.openService("//blp/mktdata")) { std::cerr <<"Failed to open //blp/mktdata" << std::endl; return; } ... SubscriptionList subscriptions; std::set<std::string>::const_iterator cItorSubscriptionStrings(m_SubscriptionStrings.begin()); for ( ; cItorSubscriptionStrings != m_SubscriptionStrings.end(); ++cItorSubscriptionStrings) { subscriptions.add((*cItorSubscriptionStrings).c_str(), "LAST_PRICE,BID,ASK,TIME", "", CorrelationId((char*)(*cItorSubscriptionStrings).c_str())); } session.subscribe(subscriptions); while (true) { Event event = session.nextEvent(); MessageIterator msgIter(event); ... while (msgIter.next()) { Message msg = msgIter.message(); if (event.eventType() == Event::SUBSCRIPTION_DATA) { if ((msg.hasElement("LAST_PRICE")) || ((msg.hasElement("BID")) && msg.hasElement("ASK"))) { double mid = 0; if ((msg.hasElement("BID")) && (msg.hasElement("ASK"))) { mid = (msg.getElementAsFloat64("BID") + msg.getElementAsFloat64("ASK")) / 2; } else { mid = msg.getElementAsFloat64("LAST_PRICE"); } ... } } } ... } 。。。 SessionOptions SessionOptions; setServerHost(d_host.c_str()); sessionOptions.setServerPort(d_端口); 会议(会议选择); 如果(!session.start()) { std::cerr

如何在使用外部C++;应用程序编程接口? 我试图创建一个使用外部C++ API的测试环境,这样我就可以离线测试,而不必连接到实际服务。本质上,我想创建我自己的假服务,用于测试目的。但是,我希望能够轻松地在这两个环境之间进行更改,而无需更改大量代码。基本上,我希望能够在测试环境中使用外部C++ ++类。我遇到的一个问题是,由于类是外部API的一部分,所以我无法更改它们。我只能将它们包装在我创建的其他类中。我怎样才能在创建一个不需要每次来回切换大量代码的环境的同时解决这个问题?下面是一些示例代码(使用API的相关部分)。如何将下面的这些类放入测试工具中?谢谢 ... SessionOptions sessionOptions; sessionOptions.setServerHost(d_host.c_str()); sessionOptions.setServerPort(d_port); Session session(sessionOptions); if (! session.start()) { std::cerr <<"Failed to start session." << std::endl; return; } if (! session.openService("//blp/mktdata")) { std::cerr <<"Failed to open //blp/mktdata" << std::endl; return; } ... SubscriptionList subscriptions; std::set<std::string>::const_iterator cItorSubscriptionStrings(m_SubscriptionStrings.begin()); for ( ; cItorSubscriptionStrings != m_SubscriptionStrings.end(); ++cItorSubscriptionStrings) { subscriptions.add((*cItorSubscriptionStrings).c_str(), "LAST_PRICE,BID,ASK,TIME", "", CorrelationId((char*)(*cItorSubscriptionStrings).c_str())); } session.subscribe(subscriptions); while (true) { Event event = session.nextEvent(); MessageIterator msgIter(event); ... while (msgIter.next()) { Message msg = msgIter.message(); if (event.eventType() == Event::SUBSCRIPTION_DATA) { if ((msg.hasElement("LAST_PRICE")) || ((msg.hasElement("BID")) && msg.hasElement("ASK"))) { double mid = 0; if ((msg.hasElement("BID")) && (msg.hasElement("ASK"))) { mid = (msg.getElementAsFloat64("BID") + msg.getElementAsFloat64("ASK")) / 2; } else { mid = msg.getElementAsFloat64("LAST_PRICE"); } ... } } } ... } 。。。 SessionOptions SessionOptions; setServerHost(d_host.c_str()); sessionOptions.setServerPort(d_端口); 会议(会议选择); 如果(!session.start()) { std::cerr,c++,api,testing,C++,Api,Testing,您可以做的一件事是使用接口(即头文件)并提供您自己的实现,至少对于您关心的那些函数是这样。在两个版本之间切换实际上相当于链接到不同的库:您的用于测试,他们的用于实际实现 有一些问题可以解决,例如仅保留公共接口和更改私有接口(在这种情况下,编译需要针对不同的声明,例如使用不同的头搜索路径): 存根版本通常希望存储不同的数据 某些对象可能需要以特定方式构造私有子对象 内联函数可能调用您并不真正想要实现的其他函数 您可以尝试引入简化器(http://www.natpryce.com/articles

您可以做的一件事是使用接口(即头文件)并提供您自己的实现,至少对于您关心的那些函数是这样。在两个版本之间切换实际上相当于链接到不同的库:您的用于测试,他们的用于实际实现

有一些问题可以解决,例如仅保留公共接口和更改私有接口(在这种情况下,编译需要针对不同的声明,例如使用不同的头搜索路径):

  • 存根版本通常希望存储不同的数据
  • 某些对象可能需要以特定方式构造私有子对象
  • 内联函数可能调用您并不真正想要实现的其他函数

您可以尝试引入简化器(http://www.natpryce.com/articles/000785.html)如果给定的API不适合测试,那么在它上面引入一个新的瘦接口,即:

是的,它是彭博市场数据馈送C++ API。问题是,我不能为彭博访问提供PC机。所以我想为自己创建一个测试环境,这样我就不用再等待访问。这是个好主意。没想到。我将为测试件创建单独的目录/源文件。我试图以某种方式在一个公共界面中将它们组合在一起。