当前位置: 首页 > news >正文

网站设计风格分析市场调研报告包括哪些内容

网站设计风格分析,市场调研报告包括哪些内容,网站建设开发有限公司,如何开发应用文章目录 1:介绍1.1、什么是gtest1.2、断言 2、gtest的简单使用3、gtest系列之事件机制4、gtest系列之死亡测试 1:介绍 1.1、什么是gtest gtest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C单元测试框架,由…

文章目录

  • 1:介绍
    • 1.1、什么是gtest
    • 1.2、断言
  • 2、gtest的简单使用
  • 3、gtest系列之事件机制
  • 4、gtest系列之死亡测试

1:介绍

1.1、什么是gtest

gtest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++单元测试框架,由google公司发布。gtest是为在不同平台上为编写C++测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。

1.2、断言

一般的,要测试一个方法(函数)是否是正常执行的,可以提供一些输入数据,在调用这个方法(函数)后,得到输出数据,然后检查输出的数据是否与我们期望的结果是一致的,若一致,则说明这个方法的逻辑是正确的,否则,就有问题。 在对输出结果进行检查(check)时,Gtest为我们提供了一系列的断言(assertion)来进行代码测试,这些宏有点类似于函数调用。当断言失败时Gtest将会打印出assertion时的源文件和出错行的位置,以及附加的失败信息。这些输出的附加信息用户可以直接通过“<<”在这些断言宏后面。

Gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。
ASSERT_* 系列的断言(Fatal assertion),当检查点失败时,退出当前函数(注意:并非退出当前案例)。

bool值检查
1>、 ASSERT_TRUE(参数),期待结果是true
2>、ASSERT_FALSE(参数),期待结果是false
数值型数据检查
3>、ASSERT_EQ(expected, actual),传入的是需要比较的两个数 equal
4>、ASSERT_NE(参数1,参数2),not equal,不等于才返回true
5>、ASSERT_LT(参数1,参数2),less than,小于才返回true
6>、ASSERT_GT(参数1,参数2),greater than,大于才返回true
7>、ASSERT_LE(参数1,参数2),less equal,小于等于才返回true
8>、ASSERT_GE(参数1,参数2),greater equal,大于等于才返回true
字符串检查
9>、ASSERT_STREQ(expected_str, actual_str),两个C风格的字符串相等才正确返回
10>、ASSERT_STRNE(str1, str2),两个C风格的字符串不相等时才正确返回
11>、ASSERT_STRCASEEQ(expected_str, actual_str)
12>、ASSERT_STRCASENE(str1, str2)
浮点型数据检查
ASSERT_FLOAT_EQ(expected, actual);
ASSERT_DOUBLE_EQ(expected, actual);
异常检查
ASSERT_THROW(statement, exception_type);语句引发给定类型的异常
ASSERT_ANY_THROW(statement);语句引发任何类型的异常
ASSERT_NO_THROW(statement);语句不会引发任何异常
EXPECT_* 系列的断言(Nonfatal assertion),当检查点失败时,继续执行下一个检查点(每一个断言表示一个测试点)。
EXPECT_系列,也是具有与ASSERT_* 系列类似的宏结构

通常情况应该首选使用EXPECT_,因为ASSERT_*在报告完错误后不会进行清理工作,有可能导致内存泄露问题。

2、gtest的简单使用

引入gtest头文件,#include <gtest/gtest.h>
采用宏来进行测试

TEST(test_case_name,test_name)

理解:将一组有关联的测试用例放在了一组测试里面
test_case_name: 针对谁的测试,这里是HuffmanTree的创建
test_name:针对某一个部分的测试,例如:针对创建节点的测试等

#include<iostream>
using namespace std;
#include<gtest/gtest.h>int Abs(int x)
{return x > 0 ? x : -x;
}int add(int a, int b)
{return a + b;
}TEST(IsAbsTest, HandlerTrueReturn)
{//ASSERT_TRUE期待结果是true,operator<<输出一些自定义的信息ASSERT_TRUE(Abs(1) == 1) << "Abs(1)=1";  ASSERT_TRUE(Abs(-1) == 1) << "Abs(-1)=1";ASSERT_FALSE(Abs(-2) == -2);  //期待结果是falseASSERT_EQ(Abs(1), Abs(-1));ASSERT_NE(Abs(-1), 0);ASSERT_LT(Abs(-1), 2);ASSERT_GT(Abs(-1), 0);ASSERT_LE(Abs(-1), 2);ASSERT_GE(Abs(-1), 0);
}
TEST(AddTest, HandlerTrueReturn)
{//EXPECT_TRUE期待结果是4,operator<<输出一些自定义的信息EXPECT_TRUE(add(1, 3) == 5) << "1+3=4";  EXPECT_EQ(add(1, 9), 10);EXPECT_NE(add(1, 4), 6);EXPECT_LT(add(1, 3), 5);EXPECT_GT(add(1, 3), 2);EXPECT_LE(add(1, 3), 4);EXPECT_GE(add(1, 3), 3);
}int main(int argc, char** argv)
{testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();
}

在这里插入图片描述
上述中期望1+3=5,这显然错了,因此测试不会通过。

3、gtest系列之事件机制

“事件” 本质是框架给你提供了一个机会, 让你能在这样的几个机会来执行你自己定制的代码, 来给测试用例准备/清理数据。gtest提供了多种事件机制,总结一下gtest的事件一共有三种:
1、TestSuite事件
需要写一个类,继承testing::Test,然后实现两个静态方法:SetUpTestCase方法在第一个TestCase之前执行;TearDownTestCase方法在最后一个TestCase之后执行。

class FooTest : public testing::Test {
protected:static void SetUpTestCase() {cout << "TestSuite event1 : start" << endl;}static void TearDownTestCase() {cout << "TestSuite event1 : end" << endl;}static int* shared_resource_;
};
int add(int a, int b)
{return a + b;
}TEST_F(FooTest, Test1)
{EXPECT_EQ(add(2, 5), 7);
}TEST_F(FooTest, Test2)
{EXPECT_STREQ("sdgsg", "sdgsg");
}
int main(int argc, char** argv)
{testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();return 0;
}

2、TestCase事件
是挂在每个案例执行前后的,需要实现的是SetUp方法和TearDown方法。SetUp方法在每个TestCase之前执行;TearDown方法在每个TestCase之后执行。
由于gtest是用c++编写,所以刚开始要调用类初始化,初始化接收用户命令行传入参数;RUN_ALL_TESTS();函数会自动运行我们做的测试用例集,system(“PAUSE”);函数会让命令行窗口停留,以便观察具体的测试结果。

#include <stdio.h>
#include <vector>
#include <iostream>
#include "gtest/gtest.h"
using namespace std;
class TestFixture : public testing::Test
{
public:virtual void SetUp(){v1_.push_back(1);//v2_.emplace_back(1);printf("SetUp\n");}virtual void TearDown() {v2_.emplace_back(1);cout << __func__ << endl;}vector<int> v1_;vector<int> v2_;
};TEST_F(TestFixture, TestName1)
{EXPECT_EQ(2, v1_.size()) << "v1_.size()number error";
}TEST_F(TestFixture, TestName2)
{cout << this->v1_.size() << endl;EXPECT_EQ(0, v2_.size());
}int main(int argc, char** argv)
{testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();
}

在这里插入图片描述
上述中因为v1容器只插入了一个,而EXPECT_EQ(2,1),当然会出错,operator<<输出一些自定义的信息(例如测试失败时打印的可能错误信息)。

3、全局事件
要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。SetUp方法在所有案例执行前执行;TearDown方法在所有案例执行后执行。
例如全局事件可以按照下列方式来使用:
除了要继承testing::Environment类,还要定义一个该全局环境的一个对象并将该对象添加到全局环境测试中去。

#include <gtest/gtest.h>
#include <stdlib.h> 
#include <stdio.h>
using namespace std;class CGlobalEnvironment :public testing::Environment
{
public:virtual void SetUp(){//TODO: Do something before every case}virtual void TearDown(){//TODO: Do something after every case}
};
/* 测试用例集的名字 当前测试用例的名字 */
TEST(demoTestCase, demoTest)
{int a = 0;for (a = 0; a < 100; a++){EXPECT_LT(a, 500);}
}//wait for testing
int add(int a, int b) {return a + b;
}
//声明testCase组,测试testAdd函数
TEST(testCase, testAdd) {ASSERT_EQ("2", "2");EXPECT_EQ(add(1, 6), 7) << " msg";// <<如果测试不过,则输出对应信息cout << "hello world" << endl;
}
TEST(testCase, tt2) {ASSERT_STREQ("2", "2");EXPECT_EQ(add(3, 5), 8);cout << "hello world" << endl;}
//同样在testCase组下,测试tt
TEST(testCase, tt) {ASSERT_STREQ("2", "2");cout << "hello world" << endl;
}
int main(int argc, char** argv)
{testing::InitGoogleTest(&argc, argv);testing::AddGlobalTestEnvironment(new CGlobalEnvironment());testing::FLAGS_gtest_filter = "*";RUN_ALL_TESTS();system("PAUSE"); //命令行停在当前窗口return 0;
}

4、gtest系列之死亡测试

这里的”死亡”指的是程序的奔溃。通常在测试的过程中,我们需要考虑各种各样的输入,有的输入可能直接导致程序奔溃,这个时候我们就要检查程序是否按照预期的方式挂掉,这也就是所谓的”死亡测试”。
1>、ASSERT_DEATH(参数1,参数2),程序挂了并且错误信息和参数2匹配,此时认为测试通过。如果参数2为空字符串,则只需要看程序挂没挂即可。
2>、ASSERT_EXIT(参数1,参数2,参数3),语句停止并且错误信息和被提前给的信息匹配。

#include<iostream>
using namespace std;
#include<gtest/gtest.h>
void Foo()
{int* pInt = 0;*pInt = 42;
}TEST(FooDeathTest, Demo)
{EXPECT_DEATH(Foo(), "");
}
int main(int argc, char** argv)
{testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();return 0;
}

测试Foo函数是否能够正常运行。

注意事项

  1. 不要在死亡测试里释放内存。
  2. 在父进程里再次释放内存。
  3. 不要在程序中使用内存堆检查。
http://www.hengruixuexiao.com/news/12903.html

相关文章:

  • 自己做网站创业广告设计需要学什么
  • 网站建设的技术可行性google下载手机版
  • 支付宝手机网站签约青岛网络优化厂家
  • 万联芯城网站建设如何做网站
  • 网页图片不能保存怎么办长沙做优化的公司
  • 建设网站企业天津百度分公司
  • 自己网站怎么做外链微信社群营销怎么做
  • 三生团队网站找谁做的广州seo推广营销
  • 百度网站怎么做友情链接西安网站建设优化
  • 怎么快速刷排名电脑优化大师下载安装
  • 佛山个性化网站开发seo网络推广公司排名
  • 网易企业邮箱修改密码百度关键词搜索优化
  • 网站简繁体转换js营销方案100例
  • 塔城地区建设工程信息网站茂名网站建设制作
  • 青浦做网站公司账户竞价托管哪里好
  • 网站设计要先做图么seo自学网官网
  • 上海网站建设上海网站制作个人网站制作软件
  • 网站维护更新做营销怎样才能吸引客户
  • 云南省建设厅网站首页营销策划案ppt优秀案例
  • 响应式网站的宽度网站查询ip地址
  • 一男一女做那个的动漫视频网站黑五类广告推广
  • 建设旅游网站的意义深圳网站关键词排名优化
  • 做煤的网站app郑州网站策划
  • 南宁高端网站武汉网站制作推广
  • 开发一个小程序北京网站seo公司
  • 网站做零售seo课程培训机构
  • 公司做网站效果怎么样武汉seo网站优化排名
  • 科技网站banner江苏建站
  • 手机门户网站模板福州百度代理
  • 国建设文化艺术协会网站全网霸屏推广系统