CppUTest文档显示
MockSupportPlugin使模拟的工作更容易。它自动为您完成以下工作:
每个测试结束时的
结束时删除所有比较器。
参考文献:https://cpputest.github.io/plugin_manual.html
我尝试了以下示例:
#include "CppUTest/TestRegistry.h"
#include "CppUTestExt/MockSupportPlugin.h"
MyDummyComparator dummyComparator;
MockSupportPlugin mockPlugin;
mockPlugin.installComparator("MyDummyType", dummyComparator);
TestRegistry::getCurrentRegistry()->installPlugin(&mockPlugin);加上我的MYDummyComparator:
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(在全局范围上,在所有作用域上递归)”?
发布于 2020-03-30 08:31:07
模拟类型比较器将用于模拟比较。
例如,您需要比较Point类型的结构,它如下所示:
struct Point {
int x;
int y;
};您可以这样定义您的比较器:
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";
}
};接下来,在您的测试组中,您需要在setup和teardown中安装这些比较器,清除它们:
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函数如下:
mock().expectOneCall("foo")
.withParameterOfType("Point *", "name", &address); // Here name is the name of variable, and &address is the address of the Point type variable.https://stackoverflow.com/questions/60892582
复制相似问题