我从我的C++项目的测试覆盖率开始,这对我来说很奇怪,很多框架都不能创建参数化的单元测试。
例如,我有一个接口:
class IBuffer {
public:
virtual void pushBytes(void *data, int length) = 0;
virtual int getSize() = 0;
};和一些实现者:
class BufferImplOne{};
class BufferImplTwo{};现在我想检查一下,将字节推入缓冲区是否真的会增加它的大小:
TEST_CASE("example/test", "Test for any IBuffer implementor") {
IBuffer *buf = // ... {I want external parameter to be here}
REQUIRE( buf->getSize() == 0 );
int dataLength = 10;
int data[dataLength];
buf->pushBytes(data, dataLength * sizeof(int));
REQUIRE( buf->getSize() == dataLength * sizeof(int));
}现在我要测试每个实现,我想做的第一件事是检查实现者是否满足接口测试。但我不想将相同的代码复制两次,我只想将实现作为参数传递给接口测试。如何处理这样的问题?
我使用的是CATCH,但似乎其他框架也没有提供相同的功能。
无论如何,我是单元测试的新手,也许我误解了一些基本的东西?
发布于 2012-05-29 14:22:55
如下所示:
void TestBuffer(IBuffer& buf)
{
REQUIRE( buf.getSize() == 0 );
int dataLength = 10;
int data[dataLength];
buf.pushBytes(data, dataLength * sizeof(int));
REQUIRE( buf.getSize() == dataLength * sizeof(int));
}
TEST_CASE("example/test", "Test for BufferImplOne implementor")
{
BufferImplOne one;
TestBuffer(one);
}
TEST_CASE("example/test", "Test for BufferImplTwo implementor")
{
BufferImplTwo two;
TestBuffer(two);
}发布于 2012-05-29 14:17:42
好吧,这是真正的多态性。
void test(IBuffer& ib) {
// ... your tests here ...
}
int main() {
BufferImplOne one;
test(one);
BufferImplTwo two;
test(two);
}我不太明白一个框架能提供什么……
https://stackoverflow.com/questions/10793862
复制相似问题