关闭

《实时控制软件设计》之单元测试

发表于:2015-12-28 10:53

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:chenhust    来源:51Testing软件测试网采编

  《构建之法》第2章讨论了个人技术和流程,一个复杂的软件都是由若干个模块组成的,提高个人的技战术能力首先从编写一个稳定的模块开始,最基本的模块就是一个类。要保证自己提交的模块代码的质量得到保证,需要进行单元测试。2.1.2节给出了好的单元测试的标准:
  在最基本的功能/参数上验证程序的正确性。
  必须由最熟悉代码的人(程序作者)来写。
  单元测试之后,机器状态保持不变。
  单元测试要快。
  单元测试应该产生可重复、一致的结果。
  单元测试的独立性--不依赖于别的测试。
  单元测试应该覆盖所有代码路径。
  单元测试应该集成到自动测试的框架中。
  单元测试必须和产品代码一起保存和维护。
  参见单元测试 & 回归测试
  本课程作业都基于C++代码编写,所以单元测试工具我们选用CPPUNIT,下面我们介绍使用方法。
  要使用CPPUNIT库进行单元测试,首先需要在你的开发环境中安装CPPUNIT库,比如在Ubuntu Linux环境下,只需要执行如下命令
  sudo apt-get install libcppunit-dev
  就会把CPPUNIT的库文件及头文件安装到Linux的系统目录中,接下来在自己的测试代码中只要include相关的头文件,直接使用CPPUNIT函数了。
  无论采用何种编译环境,总可以通过下载CPPUNIT的源代码(下载地址)进行编译和编译环境内的路径参数设置来完成环境配置。
  可以通过编译如第1个最简单的例程来测试CPPUNIT是否安装好:
//mytest.cpp
#include <iostream>
#include <cppunit/TestCase.h>
class MyTest:public CppUnit::TestCase
{
public:
MyTest(std::string name): CppUnit::TestCase(name){}
void runTest()
{
CPPUNIT_ASSERT(1 == 1);
CPPUNIT_ASSERT_DOUBLES_EQUAL(2.11, 2.13, 0.01);
}
};
int main()
{
MyTest test1("Test1_Name");
std::cout << "This is the test: " << test1.getName() << std::endl;
std::cout << "The test has number:" << test1.countTestCases() << std::endl;
test1.runTest();
return 0;
}
  在Ubuntu下可以用命令行编译该程序:
  g++ -o mytest mytest.cpp -I/opt/local/include -L/opt/locallib -lcppunit -ldl
  编译通过后运行该程序,会显示结果如下:
  接下来我们分析下mytest.cpp的代码,里面定义了一个测试用例类MyTest,继承自CPPUNIT的TestCase类,并在runTest中定义了两个测试宏:
  CPPUNIT_ASSERT(1 == 1);
  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.11, 2.13, 0.01);
  第一个是调用CPPUNIT_ASSERT(condition),判断condition是否为真。
  第二个是调用CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta),判断两个浮点数expected和actual之间的差是否大于delta。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号