C++ 为什么Qt测试单元中的HTTP客户端未正确连接到服务器?

C++ 为什么Qt测试单元中的HTTP客户端未正确连接到服务器?,c++,qt,unit-testing,server,client,C++,Qt,Unit Testing,Server,Client,我一直在使用C++/Qt开发一个客户机-服务器库,并编写了单独的程序,可以正常运行。 现在我想用Qt的单元测试框架来测试这个。到目前为止,我已经编写了客户端代码,但它不能正常工作。有时它不连接到服务器,并且当它连接它发送的数据时为空 class JsonRPCServerTest : public QObject { Q_OBJECT public: JsonRPCServerTest(QObject* parent = nullptr); ~JsonRPCServer

我一直在使用C++/Qt开发一个客户机-服务器库,并编写了单独的程序,可以正常运行。 现在我想用Qt的单元测试框架来测试这个。到目前为止,我已经编写了客户端代码,但它不能正常工作。有时它不连接到服务器,并且当它连接它发送的数据时为空

class JsonRPCServerTest : public QObject {
    Q_OBJECT

public:
    JsonRPCServerTest(QObject* parent = nullptr);
    ~JsonRPCServerTest();

private Q_SLOTS:
    void initTestCase();
    void client();
    void cleanupTestCase();
private :
    JsonRPCClient m_client;
};

JsonRPCServerTest::JsonRPCServerTest(QObject* parent):
    QObject(parent) {
}

void JsonRPCServerTest::client() {
    m_client.setUrl(QUrl("http://127.0.0.1:8383"));
    int i = 1;
    QJsonObject jobj;
    jobj["x"] = i;
    jobj["y"] = i;
    JsonRPCRequest req(1, "sum", jobj);
    qDebug() << "Dispatching " << req.data();
    m_client.dispatch(req);
    qApp->processEvents();
}

QTEST_GUILESS_MAIN(JsonRPCServerTest)

#include "tst_jsonrpcserver.moc"
类JsonRPCServerTest:公共QObject{
Q_对象
公众:
JsonRPCServerTest(QObject*parent=nullptr);
~JsonRPCServerTest();
专用Q_插槽:
void initTestCase();
无效客户端();
void cleanupTestCase();
私人:
JsonRPCClient m_客户端;
};
JsonRPCServerTest::JsonRPCServerTest(QObject*parent):
QObject(父对象){
}
void JsonRPCServerTest::client(){
m_client.setUrl(QUrl(“http://127.0.0.1:8383"));
int i=1;
qjsonobjectjobj;
jobj[“x”]=i;
jobj[“y”]=i;
JsonRPCRequest请求(1,“总和”,jobj);

qDebug()为什么要在那里调用processEvents?通常不应该调用它,因为重入问题,它可能会导致各种有趣的行为。之前我没有添加这一行,但客户端从未连接到服务器。然后我搜索了一点,发现了,所以我调用了processEvents,结果与上面描述的一样。processEvents将只处理当前在队列中的事件,然后返回。通常情况下,您希望事件循环滚动。但这是测试代码,我没有使用QTest,因此不太确定应该如何进行。但一般来说,在单元测试中,您通常没有网络连接等。如果有,则不再进行单元测试。我删除了processEvents调用并添加了QTest::qWait(10000)在客户端插槽中,现在它似乎工作正常。感谢您的评论。