c++ - 如何在谷歌测试中测试多线程?

标签 c++ multithreading googletest

以下测试代码创建了一个服务器套接字和一个客户端套接字。然后客户端向服务器发送消息,服务器回复。就这样。但是我无法编译。线程函数中的所有 ASSERT_EQ 都会引发错误 “error: void value not ignored as it should be”。我不知道这应该告诉我什么。这里有什么问题?类型无关紧要,因为 ASSERT_EQ(1, 1); 也会引发错误。

编辑在谷歌的常见问题解答中找到了这个:

问:我的编译器提示“void value not ignored as it shouldly be.”这是什么意思?

答:您可能在不返回 void 的函数中使用 ASSERT_XY()。 ASSERT_XY() 只能在无效函数中使用。

我该如何理解?

void * serverfunc(void * ptr);  
void * clientfunc(void * ptr);    

TEST(netTest, insert)
{
  pthread_t mThreadID1, mThreadID2;
  ::pthread_create(&mThreadID1, nullptr, serverfunc, nullptr);
  ::sleep(1);
  ::pthread_create(&mThreadID1, nullptr, clientfunc, nullptr);
  ::pthread_join(mThreadID1, nullptr);
  ::pthread_join(mThreadID2, nullptr);        
}

void * serverfunc(void * ptr)
{
  net::ServerSocket serv(IPV4, TCP, 55555,5);
  net::ServerSocket * conn = serv.accept();
  net::Message msg;

  conn->recvmsg(&msg);

  ASSERT_EQ(msg.size(),5);
  ASSERT_EQ(msg[0],1);
  ASSERT_EQ(msg[1],2);
  ASSERT_EQ(msg[2],3);
  ASSERT_EQ(msg[3],4);
  ASSERT_EQ(msg[4],5);

  msg = {9,8,6};
  ASSERT_EQ(msg.size(),3);
  ASSERT_EQ(msg[0],9);
  ASSERT_EQ(msg[1],8);
  ASSERT_EQ(msg[2],6);

  conn->sendmsg(msg);

  ::sleep(1);

  delete conn;
  return 0;
}

void * clientfunc(void * ptr)
{
  net::ClientSocket clie(IPV4, TCP, "localhost",55555);
  net::Message msg;

  msg = {1,2,3,4,5};
  ASSERT_EQ(msg.size(),5);
  ASSERT_EQ(msg[0],1);
  ASSERT_EQ(msg[1],2);
  ASSERT_EQ(msg[2],3);
  ASSERT_EQ(msg[3],4);
  ASSERT_EQ(msg[4],5);

  clie.sendmsg(msg);

  clie.recvmsg(&msg);

  ASSERT_EQ(msg.size(),3);
  ASSERT_EQ(msg[0],9);
  ASSERT_EQ(msg[1],8);
  ASSERT_EQ(msg[2],6);

  return 0;
}

最佳答案

Q:My compiler complains "void value not ignored as it ought to be." What does this mean?

A: You're probably using an ASSERT_XY() in a function that doesn't return void. ASSERT_XY() can only be used in void functions.

How shall I understand this?

您的函数不返回 void,它们返回 void* - 即它们返回一些东西(void* 是一个指向 -任何东西),而他们应该什么都不返回。 FAQ 指出使用 ASSERT_EQ() 的函数需要具有 void 返回类型。

关于c++ - 如何在谷歌测试中测试多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13516010/

相关文章:

unit-testing - 处理可选测试

C++ 虚类函数返回具体子类的实例

c++ - 为什么 string::find 返回 size_type 而不是迭代器?

c++ - GCC 的函数 __attribute__ 是否与虚函数一起使用?

java - 在 Java 中,多少个 Future 才算太多?

c - C程序不会终止

java - Java 中的定时器与线程原语

c++ - 链接到使用不同编译器标志构建的静态库是否安全

c++ - 嵌入式系统的谷歌测试

c++ - 在 Clion 2017 中保存时自动删除尾随空格