首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过接口测试实现

通过接口测试实现
EN

Stack Overflow用户
提问于 2012-05-29 14:06:39
回答 2查看 148关注 0票数 2

我从我的C++项目的测试覆盖率开始,这对我来说很奇怪,很多框架都不能创建参数化的单元测试。

例如,我有一个接口:

代码语言:javascript
复制
class IBuffer {
public:
   virtual void pushBytes(void *data, int length) = 0;
   virtual int  getSize() = 0;
};

和一些实现者:

代码语言:javascript
复制
class BufferImplOne{};
class BufferImplTwo{};

现在我想检查一下,将字节推入缓冲区是否真的会增加它的大小:

代码语言:javascript
复制
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,但似乎其他框架也没有提供相同的功能。

无论如何,我是单元测试的新手,也许我误解了一些基本的东西?

EN

回答 2

Stack Overflow用户

发布于 2012-05-29 14:22:55

如下所示:

代码语言:javascript
复制
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);
}
票数 4
EN

Stack Overflow用户

发布于 2012-05-29 14:17:42

好吧,这是真正的多态性。

代码语言:javascript
复制
void test(IBuffer& ib) {
    // ... your tests here ...
}

int main() {
    BufferImplOne one;
    test(one);

    BufferImplTwo two;
    test(two);
}

我不太明白一个框架能提供什么……

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10793862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档