在单元测试中使用线程的错误C2064

时间:2016-07-13 12:13:43

标签: multithreading unit-testing c++11

//-------------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()时会抛出上述错误。

如何对线程进行单元测试?

1 个答案:

答案 0 :(得分:1)

将其设为std::thread t(&BlockingQueue<T>::test, this);

指向成员函数的指针绝不是可调用的0参数 - 它至少需要一个指向成员函数的对象的指针或引用(加上其签名中的参数)。