मैं gtest के साथ एक टेम्पलेट वर्ग का परीक्षण करना चाहता हूँ। मैंने gtest मैनुअल में TYPED_TEST
एस पढ़ा और आधिकारिक उदाहरण (samples\sample6_unittest.cc) को संदर्भित किया। उदाहरण से इस टेम्पलेट में केवल एक टेम्पलेट पैरामीटर है। लेकिन, मेरे कोड में दो टेम्पलेट पैरामीटर हैं, मैं इसका परीक्षण कैसे कर सकता हूं?gtest का उपयोग कर एकाधिक टेम्पलेट पैरामीटर के साथ C++ टेम्पलेट क्लास का परीक्षण कैसे करें?
// two element type
template <typename E, typename F>
class QueueNew
{
public:
QueueNew() {}
void Enqueue(const E& element) {}
E* Dequeue() {}
F size() const
{
return (F)123;
}
};
जिसके लिए मैं नीचे परीक्षण कोड लिखा है::
error C2976: 'QueueTestNew' : too few template arguments
see declaration of 'QueueTestNew'
...
मैं:
template <class E, class F>
QueueNew<E, F>* CreateQueue();
template <>
QueueNew<int, int>* CreateQueue<int, int>()
{
return new QueueNew < int, int > ;
}
template <>
QueueNew<char, char>* CreateQueue<char, char>()
{
return new QueueNew < char, char > ;
}
template <class E, class F>
class QueueTestNew;
template <class E>
class QueueTestNew<E, int> : public testing::Test
{
protected:
QueueTestNew() : queue(CreateQueue<E, int>()){}
virtual ~QueueTestNew(){ delete queue; }
QueueNew<E, int>* const queue;
};
template <class E>
class QueueTestNew<char, E> : public testing::Test
{
protected:
QueueTestNew() : queue(CreateQueue<char, E>()){}
virtual ~QueueTestNew(){ delete queue; }
QueueNew<char, E>* const queue;
};
// The list of types we want to test.
typedef ::testing::Types <char, int> Implementations;
TYPED_TEST_CASE(QueueTestNew, Implementations);
TYPED_TEST(QueueTestNew, DefaultConstructor)
{
EXPECT_EQ(123u, this->queue->size());
}
लेकिन जब निर्माण, मैं त्रुटि मिलती है
मैं निम्नलिखित कोड है लगता है कि gtest के साथ मेरी टेस्ट टेम्पलेट विधि गलत है, तो मुझे यह कैसे करना चाहिए?
तुम एक प्रकार परिभाषित कर सकते ऐसा करने के लिए, आप इस तरह के रूप में एक टेम्प्लेट की संरचना को परिभाषित कर सकते आपके प्रत्येक उपप्रकार। फिर उस कंट्री द्वारा टाइप-पैरामीट्रिज्ड होने के लिए 'क्यूईटेस्टन्यू' बनाएं (अतिरिक्त टेम्पलेट पैराम्स को घोंसला)। – SleuthEye
क्षमा करें, मुझे यह नहीं मिला। – thinkerou