//-------------cpp11 BlockingQueue.h
//------test2()----------enques messages
template <typename T>
int BlockingQueue<T>::test2()
{
//BlockingQueue<std::string> q;
std::thread t(&BlockingQueue<T>::test);
for (int i = 0; i<15; ++i)
{
std::ostringstream temp;
temp << i;
std::string msg = std::string("msg#") + temp.str();
{
std::lock_guard<std::mutex> l(mtx_);
std::cout << "\n main enQing " << msg.c_str();
}
enQ(msg);
std::this_thread::sleep_for(std::chrono::milliseconds(3));
}
enQ("quit");
std::cout << "\n _q size is " << q_.size() << std::endl;
t.join();
//test();
return q_.size();
}
//--------<test()>----------- dequeues messages
template <typename T>
void BlockingQueue<T>::test()
{
std::string msg;
do
{
msg = deQ();
{
std::lock_guard<std::mutex> l(mtx_);
std::cout << "\n thread deQed " << msg.c_str();
}
std::this_thread::sleep_for(std::chrono::milliseconds(10));
} while (msg != "quit");
}
//----------<unit test project------------>
#include"gtest\gtest.h"
#include"Cpp11-BlockingQueue.h"
TEST(testBQ, simpleTest)
{
BlockingQueue<std::string> obj;
EXPECT_EQ(0, obj.test2());
}
错误:错误1错误C2064:term不计算为在unitTest_MyBQ中取0参数的函数
我正在尝试使用Google测试来测试我的阻止队列实现。
当我不在test2()
方法中使用线程来调用test()
方法时,unitTest运行正常,但在使用线程调用test()
时会抛出上述错误。
如何对线程进行单元测试?
答案 0 :(得分:1)
将其设为std::thread t(&BlockingQueue<T>::test, this);
指向成员函数的指针绝不是可调用的0参数 - 它至少需要一个指向成员函数的对象的指针或引用(加上其签名中的参数)。