创建 EPICSv7的单元测试程序,验证 PVRecord(过程变量记录)的功能。通过单元测试验证了三种 PVRecord 的创建:标量记录(Scalar Record):存储单个值(如 double、int 等);数组记录(Scalar Array Record):存储同类型值的数组;自定义记录(PowerSupply):基于特定结构的自定义记录。
#include <epicsUnitTest.h>
#include <testMain.h>
// ...其他头文件...
using namespace epics::pvData;
using namespace epics::pvDatabase;
using namespace epics::pvCopy;
epicsUnitTest.h
:EPICS 单元测试框架。pvData.h
:提供基础数据类型(如ScalarType
、PVStructure
)。pvDatabase.h
:提供 PVRecord 相关类。powerSupply.h
:自定义的电源记录结构(需额外实现)。// 创建标量记录(如double、int等单值)
static PVRecordPtr createScalar(
string const & recordName,
ScalarType scalarType,
string const & properties)
{
PVStructurePtr pvStructure = getStandardPVField()->scalar(scalarType,properties);
PVRecordPtr pvRecord = PVRecord::create(recordName,pvStructure);
return pvRecord;
}
// 创建标量数组记录
static PVRecordPtr createScalarArray(
string const & recordName,
ScalarType scalarType,
string const & properties)
{
PVStructurePtr pvStructure = getStandardPVField()->scalarArray(scalarType,properties);
return PVRecord::create(recordName,pvStructure);
}
getStandardPVField()
)创建不同类型的结构,并封装为 PVRecord。scalarType
:标量类型(如pvDouble
、pvInt
)。properties
:元数据属性(如"alarm,timeStamp"
)。// 测试标量记录
static void scalarTest()
{
PVRecordPtr pvRecord = createScalar("doubleRecord", pvDouble, "alarm,timeStamp.display");
testOk1(pvRecord.get() != 0); // 验证记录创建成功
}
// 测试数组记录
static void arrayTest()
{
PVRecordPtr pvRecord = createScalarArray("doubleArrayRecord", pvDouble, "alarm,timeStamp");
testOk1(pvRecord.get() != 0);
}
// 测试自定义PowerSupply记录
static void powerSupplyTest()
{
PVStructurePtr pv = createPowerSupply(); // 需在powerSupply.h中实现
PVRecordPtr pvRecord = PowerSupply::create("powerSupply", pv);
testOk1(pvRecord.get() != 0);
}
testOk1()
是 EPICS 单元测试框架的断言函数。MAIN(testPVRecord)
{
testPlan(3); // 声明要运行3个测试用例
scalarTest();
arrayTest();
powerSupplyTest();
return 0;
}
MAIN()
是 EPICS 定义的测试程序入口宏。testPlan(3)
指定测试用例数量,用于统计测试结果。PVStructure
)。ScalarType:枚举类型,表示基本数据类型:
enum ScalarType {
pvBoolean, pvByte, pvShort, pvInt, pvLong,
pvUByte, pvUShort, pvUInt, pvULong,
pvFloat, pvDouble, pvString
};
properties
参数(如"alarm,timeStamp"
):powerSupply.h
的实现,定义电源特有的字段(如电压、电流)。代码通过单元测试验证了 EPICS 的三种基本记录类型的创建功能,是理解 EPICS 数据模型和测试框架的良好示例。实际应用中,还需扩展测试用例以覆盖更多功能场景(如数据操作、异常处理)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。