Tôi muốn thử nghiệm một lớp mẫu có gtest. Tôi đọc khoảng TYPED_TEST
s trong hướng dẫn sử dụng gtest và xem ví dụ chính thức (samples\sample6_unittest.cc) mà chúng tham chiếu. Mẫu này từ ví dụ này chỉ có một tham số mẫu. Nhưng, mã của tôi có hai tham số mẫu, làm thế nào tôi có thể kiểm tra nó?Làm thế nào để kiểm tra lớp mẫu C++ với nhiều tham số mẫu sử dụng gtest?
Tôi có đoạn mã sau:
// 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;
}
};
mà tôi đã viết mã kiểm tra dưới đây:
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());
}
nhưng khi xây dựng, tôi nhận được lỗi:
error C2976: 'QueueTestNew' : too few template arguments
see declaration of 'QueueTestNew'
...
tôi nghĩ rằng phương pháp mẫu thử nghiệm của tôi với gtest là sai, vì vậy tôi nên làm như thế nào?
Bạn có thể định nghĩa một kiểu như một cấu trúc với nhiều typedefs cho mỗi loại phụ của bạn. Sau đó, tạo 'QueueTestNew' thành kiểu-parametrized bởi cấu trúc đó (lồng các tham số mẫu bổ sung). – SleuthEye
Xin lỗi, tôi không hiểu. – thinkerou