Bir şablon sınıfını gtest ile test etmek istiyorum. TYPED_TEST
s hakkında en çok okunan el kitabını okudum ve başvuru yaptıkları resmi örneğe (samples\sample6_unittest.cc) baktım. Örnekteki bu şablon sadece bir şablon parametresine sahiptir. Ancak, kodumun iki şablon parametresi var, nasıl test edebilirim? Aşağıda test kodu yazmış olanC++ şablon sınıfını, gtest kullanarak birden çok şablon parametresiyle nasıl test edebilirsiniz?
// 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'
...
I:
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());
}
ama bina, hatası alıyorum
Aşağıdaki kod var test şablonu yöntemimin gtest ile yanlış olduğunu düşünüyorum, bu yüzden nasıl yapmalıyım?
Bunu yapmak için, aşağıdaki gibi bir templated yapısını tanımlayabilir alt tiplerin her biri. Daha sonra bu yapı tarafından tür parametreli hale getirin (ek şablon paramlarını yerleştirerek). – SleuthEye
Üzgünüm, anlamadım. – thinkerou