//-------------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());
}
Error: Error 1 error C2064: term does not evaluate to a function taking 0 arguments in unitTest_MyBQошибка C2064 для многопоточных модульного тестирования
Я пытаюсь проверить свою реализацию очереди блокировки с помощью теста Google. Когда я не использую thread в методе test2()
для вызова метода test()
, unitTest работает нормально, но выдает указанную выше ошибку, когда поток используется для вызова test()
.
Как выполнить модульное тестирование потоков?
ваш ответ помог! большое спасибо – askatral