首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MockSupportPlugin在CppUTest中自动执行checkExpectations?

如何使用MockSupportPlugin在CppUTest中自动执行checkExpectations?
EN

Stack Overflow用户
提问于 2020-03-27 19:04:17
回答 1查看 969关注 0票数 1

CppUTest文档显示

MockSupportPlugin使模拟的工作更容易。它自动为您完成以下工作:

每个测试结束时的

  • checkExpectations (在全局范围上,它对所有作用域进行递归)
  • 在每个测试的末尾清除所有期望,安装在每个测试
  • 开头的插件中配置的所有比较器,在每个测试

结束时删除所有比较器。

参考文献:https://cpputest.github.io/plugin_manual.html

我尝试了以下示例:

代码语言:javascript
复制
#include "CppUTest/TestRegistry.h"
#include "CppUTestExt/MockSupportPlugin.h"

MyDummyComparator dummyComparator;
MockSupportPlugin mockPlugin;

mockPlugin.installComparator("MyDummyType", dummyComparator);
TestRegistry::getCurrentRegistry()->installPlugin(&mockPlugin);

加上我的MYDummyComparator:

代码语言:javascript
复制
class MyDummyComparator : public MockNamedValueComparator
{
   bool isEqual( const void *object1, const void *object2 )
   {
      return object1 == object2;
   }

   SimpleString valueToString( const void *object )
   {
      return SimpleString();
   }
} dummyComparator;

但是,当我从测试中删除expectOneCall()或expectNCalls()时,它会显示测试失败。如何使用来自CPPUTest的CPPUTest自动实现“每个测试结束时的checkExpectations(在全局范围上,在所有作用域上递归)”?

EN

回答 1

Stack Overflow用户

发布于 2020-03-30 08:31:07

模拟类型比较器将用于模拟比较。

例如,您需要比较Point类型的结构,它如下所示:

代码语言:javascript
复制
struct Point {
    int    x;
    int    y;
};

您可以这样定义您的比较器:

代码语言:javascript
复制
class PointTypeComparator : public MockNamedValueComparator
{
public:
    bool isEqual(const void* object1, const void* object2) override
    {
        // Casting here the void pointers to the type to compare
        const auto *pointObject1 = (const Point *) object1; 
        const auto *pointObject2 = (const Point *) object2;

        // Perform comparison, in this case, comparing x and y
        return ((pointObject1->x == pointObject2->x)
                && (pointObject1->y == pointObject2->y);
    }
    virtual SimpleString valueToString(const void* object)
    {
        return (char *) "string";
    }
};

接下来,在您的测试组中,您需要在setupteardown中安装这些比较器,清除它们:

代码语言:javascript
复制
TEST_GROUP(MyTest)
{
    void setup()
    {
        PointTypeComparator pointComparator;
        mock().installComparator("Point *", pointComparator);  // Note, its a pointer to a Point type
    }

    void teardown()
    {
        // Call check expectations here, and also clear all comparators after that
        mock().checkExpectations();
        mock().clear();
        mock().removeAllComparatorsAndCopiers();
    }
};

接下来,您可以使用这个比较器,使用withParameterOfType函数如下:

代码语言:javascript
复制
mock().expectOneCall("foo")
    .withParameterOfType("Point *", "name", &address); // Here name is the name of variable, and &address is the address of the Point type variable.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60892582

复制
相关文章

相似问题

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