c++ 一个类模拟黑盒测试!!

ops/2025/2/5 6:06:58/

在软件开发中,我们经常需要对程序的输出进行验证,以确保其符合预期。为了实现这一目的,我们可以设计一个专门的类来封装输入、预期输出和实际输出的比较逻辑。本文将介绍一个经过修改的test类,它能够有效地用于程序的最终检查,验证预期输入是否能达到预期输出。

类定义与成员变量

test类包含以下成员变量:

  • int inPort:用于存储预期输入值。
  • int* outPort:指向实际输出值的指针。
  • int expect:用于存储预期输出值。

这些成员变量为类的功能提供了基础。

构造函数与析构函数

test类具有一个默认构造函数,用于初始化成员变量。构造函数将inPort设置为0,outPort设置为nullptrexpect也设置为0。析构函数目前为空,但保留了其定义,以便在需要时可以轻松地添加清理代码。

成员函数

test类提供了以下成员函数:

  • void setIn(int num):设置预期输入值。
  • int getOut():获取实际输出值。如果outPortnullptr,则抛出一个运行时异常,以避免空指针解引用错误。
  • void setExp(int num):设置预期输出值。
  • int getIn():获取预期输入值。
  • int getExp():获取预期输出值。
  • void setOut(int *p):设置指向实际输出值的指针。
  • void judge():比较预期输出值和实际输出值。如果它们相等,则输出“ok!”,否则输出“wrong!!”。在比较之前,judge方法会检查outPort是否为nullptr,以避免潜在的错误。

使用示例

以下是一个使用test类的示例:

#include<iostream>
#include<stdexcept> // 为了使用std::runtime_errorclass test {int inPort;int* outPort;int expect;
public:test(): inPort(0), outPort(nullptr), expect(0) {}~test() {}void setIn(int num) {inPort = num;}int getOut() {if (outPort != nullptr) {return *outPort;} else {throw std::runtime_error("Error: outPort is a null pointer!");}}void setExp(int num) {expect = num;}int getIn() {return inPort;}int getExp() {return expect;}void setOut(int *p) {outPort = p;}void judge() {if (outPort == nullptr) {std::cerr << "Error: Cannot judge, outPort is a null pointer!" << std::endl;return;}if (expect == *outPort) {std::cout << "ok!" << std::endl;} else {std::cout << "wrong!!" << std::endl;}}
};int main() {test p;std::cout << "输入一个数,这个数会自增1" << std::endl;int a = 0;std::cin >> a;p.setIn(a); // 这里我修改了,将用户输入的值直接设置给inPorta++;p.setOut(&a);p.setExp(a); // 这里我也修改了,因为预期结果应该是用户输入值加1try {std::cout << "预期输入值:" << p.getIn() << std::endl;std::cout << "预期结果:" << p.getExp() << std::endl;std::cout << "实际结果:" << p.getOut() << std::endl;p.judge();} catch (const std::runtime_error& e) {std::cerr << e.what() << std::endl;}return 0;
}

在这个示例中,用户输入一个数,程序将其自增1后作为实际输出。然后,我们使用test类来设置预期输入值、预期输出值和实际输出值,并进行比较。如果比较结果不符合预期,则会抛出异常并输出错误信息。

总结

修改后的test类为程序的最终检查提供了一个简单而有效的方法。通过封装输入、预期输出和实际输出的比较逻辑,它能够帮助开发者确保代码的正确性。此外,该类的设计也考虑到了健壮性和可读性,使得其在实际应用中更加可靠和易于维护。


http://www.ppmy.cn/ops/155789.html

相关文章

手写单例模式

饿汉式加载模式&#xff08;线程安全&#xff09; 类一加载就创建对象&#xff0c;这种方式比较常用 优点&#xff1a;线程安全&#xff0c;没有加锁&#xff0c;执行效率高 缺点&#xff1a;不是懒加载&#xff0c;类初始化的时候就加载&#xff0c;浪费内存空间 package …

2024年终总结来了

忘记发CSDN的年度总结了&#xff0c;今天补上吧 说实话&#xff0c;今年过得不是特别好&#xff0c;感觉遇到了瓶颈&#xff0c;人生变得迷茫起来。不知道大家有没有同样的感受 刚毕业的时候人生充满了憧憬&#xff0c;慢慢的随着年龄变大后&#xff0c;就会觉得一事无成&…

【PyQt】keyPressEvent键盘按压事件无响应

问题描述 通过load ui 文件加载程序时&#xff0c;keyPressEvent键盘按压事件无响应 原因 主要是由于事件处理的方式和窗口的显示方式不正确所导致的。 解决代码 self&#xff1a;这里的self作为loadUi函数的第二个参数&#xff0c;意味着加载的界面将被设置为当前类实例&…

基于场景图的零样本目标导航

参考论文&#xff1a;SG-Nav&#xff1a;Online 3D Scene Graph Prompting for LLM-based Zero-shot Object Navigation 0 前言 基于现成的视觉基础模型VFMs和大语言模型LLM构建了无需任何训练的零样本物体巡航框架SG-Nav。 通过VLMs将机器人对场景的观测构建为在线的3D场景图…

【Go - 小顶堆/大顶堆】

在 Go 语言中&#xff0c;标准库 container/heap 提供了堆&#xff08;Heap&#xff09;的实现。可以使用 container/heap 包来实现自己的大顶堆或小顶堆。 小顶堆示例 以下是一个使用 container/heap 包实现的小顶堆示例&#xff1a; package mainimport ("container/…

结构体和类

结构体和类 C结构体中的所有默认成员函数&#xff08;如&#xff1a;构造函数&#xff09;里面可以写一切合法的代码 不单单只可eg:初始化变量{}可以用来划定变量的使用范围 eg: int main() {{int a 0;//则a只能在这个{}里面使用}return 0 ;}<<输出运算符能够直接打印C…

牛客周赛 Round 79

题目目录 A 小红的合数寻找解题思路参考代码 B 小红的小球染色解题思路参考代码 C 小红的二叉树解题思路参考代码 D 小红的“质数”寻找解题思路参考代码 E 小红的好排列解题思路参考代码 F 小红的小球染色期望解题思路参考代码 A 小红的合数寻找 \hspace{15pt} 小红拿到了一个…

【R语言】环境空间

一、环境空间的特点 环境空间是一种特殊类型的变量&#xff0c;它可以像其它变量一样被分配和操作&#xff0c;还可以以参数的形式传递给函数。 R语言中环境空间具有如下3个特点&#xff1a; 1、对象名称唯一性 此特点指的是在不同的环境空间中可以有同名的变量出现&#x…