QUint单元测试

原帖地址:http://www.cnblogs.com/zhangzexin/archive/2013/06/01/quint-unit-testing.html

单元测试的必要性和历史之类的东西就不讲了,喜欢的可以自己google一下.

QUint是jQuery团队操刀的一个用于javascript单元测试的类库,在同类中算是比较简洁高效.今天以QUint来讲一下单元测试的一些基本的使用方法,算是记录自己的学习过程,也希望能帮到各位看官.

测试需要导入的文件: QUint.js  QUint.css

我们看看简单的基本语法先?恩.好!

  1.   equal() --- 简单的比较测试,看看测试的值是否期望所要的值:

    test( "equal test", function() {
    equal( 0, 0, "Zero; equal succeeds" );
    equal( "", 0, "Empty, Zero; equal succeeds" );
    equal( "", "", "Empty, Empty; equal succeeds" );
    equal( 0, 0, "Zero, Zero; equal succeeds" );
    equal( "three", 3, "Three, 3; equal fails" );
    equal( null, false, "null, false; equal fails" );
    });


    如下图所示:

    equalTest



    传入的参数1和参数2如果可以用"=="计算来返回true,则test成功,否则该次test返回失败.





  2. deepEqual()--- 然后是检测一个对象的值是否符合预期:



    test( "deepEqual test", function() {
    var obj = { foo: "bar" };
    deepEqual( obj, { foo: "bar" }, "Two objects can be the same in value" );
    });


    可以得到:

    捕获





  3. ok() --- 根据传入的boolean值来返回一个检测状态 :



    test( "ok test", function() {
    ok( true, "true succeeds" );
    ok( "non-empty", "non-empty string succeeds" );

    ok( false, "false fails" );
    ok( 0, "0 fails" );
    ok( NaN, "NaN fails" );
    ok( "", "empty string fails" );
    ok( null, "null fails" );
    ok( undefined, "undefined fails" );
    });


    如下图所示:



    ok捕获


    根据传入的第一个参数来绝对该次test是否成功.



    本文链接

connect(timer,&QTimer::timeout,this,[this](){ modbuscom->readHoldingReg(40000,6); // 读保持寄存器实现 void ModbusComm::readHoldingReg(quint16 addr, quint16 count) { // 检查连接状态 if (m_client->state() != QModbusDevice::ConnectedState) { emit sigCommStatus("未连接设备,无法读寄存器"); return; } // 创建保持寄存器类型的数据单元 QModbusDataUnit unit(QModbusDataUnit::HoldingRegisters, addr, count); // 发送读请求 if (auto *reply = m_client->sendReadRequest(unit, m_slaveAddress)) { connect(reply, &QModbusReply::finished, this, &ModbusComm::onReadFinished); connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); } else { emit sigCommStatus(QString("读寄存器请求失败:%1").arg(m_client->errorString())); } } // 处理读请求回复的实现 void ModbusComm::onReadFinished() { // 获取当前回复对象 auto *reply = qobject_cast<QModbusReply *>(sender()); if (!reply) return; // 检查回复是否有错误 if (reply->error() == QModbusDevice::NoError) { const QModbusDataUnit unit = reply->result(); // 根据数据类型分发信号 switch (unit.registerType()) { case QModbusDataUnit::Coils: // 线圈数据:地址+状态(true/false) for (int i = 0, count = static_cast<int>(unit.valueCount()); i < count; ++i) { quint16 addr = unit.startAddress() + i; bool status = (unit.value(i) != 0); // 非0即为ON emit sigCoilData(addr, status); } break; case QModbusDataUnit::HoldingRegisters: // 保持寄存器数据:地址+值 for (int i = 0, count = static_cast<int>(unit.valueCount()); i < count; ++i) { quint16 addr = unit.startAddress() + i; quint16 value = unit.value(i); emit sigRegData(addr, value); // 调试信息示例(修正后) qDebug() << QString("读取存储器 - 地址:%1 状态:%2").arg(addr).arg(value); } break; default: // 其他类型暂不处理 break; } } else { // 读取失败,发送错误信息 emit sigCommStatus(QString("读取失败:%1").arg(reply->errorString())); } } void MainWindow::on_RegDataReceived(quint16 addr, quint16 value) { QString text = QString("寄存器地址:%1 值:%2").arg(addr).arg(value); if(addr == 40001){ ui->label_shuiNi->setText(text); } if(addr ==40003 ){ ui->label_biZhong->setText(text); } if(addr == 40005){ ui->label_shuiHuiBi->setText(text); } } connect(modbuscom,&ModbusComm::sigRegData,this,&MainWindow::on_RegDataReceived); 我的思路是,我用timer定时信号去读昆仑通态触摸屏的设备通道名称分别是4DF0001,4DF0003,和4DF0005的数据(浮点数),分别显示在我的上位机软件的三个标签控件里!现在遇到的问题是不显示!通讯正常,能读线圈元件,就不能读存储器!帮我找找原因!!!
最新发布
08-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值