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

宜春网站推广优化新闻稿发布

宜春网站推广优化,新闻稿发布,深圳少儿编程培训机构,东莞疫情防控最新政策最近做了一段测试工作,其中包括单元测试,编程语言是C。这里提供一些基本知识总结,方便入门单元测试。 1.单元测试介绍 单元测试(Unit Testing, 简称UT)是软件测试的一种方法,目的是通过对单个软件组件&am…

        最近做了一段测试工作,其中包括单元测试,编程语言是C++。这里提供一些基本知识总结,方便入门单元测试。

1.单元测试介绍

单元测试(Unit Testing, 简称UT)是软件测试的一种方法,目的是通过对单个软件组件(即单元)的验证,确保其按预期工作。对于C++程序开发者来说,单元测试是一项重要的质量保障手段,能够帮助开发者在代码开发过程中及时发现和修复问题。

单元测试的优点:

  • 提高代码质量:通过自动化的测试,能够有效捕捉到程序中的潜在缺陷。
  • 回归测试:随着代码的不断重构和修改,单元测试能够确保原有功能没有被破坏。
  • 文档化代码:良好的单元测试不仅是验证代码的工具,也充当了文档角色,帮助开发人员更容易理解代码的预期行为。
  • 减少调试时间:因为测试能够尽早发现问题,能够帮助开发者避免在较后阶段出现难以调试的问题。

单元测试的挑战:

  • 测试覆盖率:虽然单元测试能够有效发现许多问题,但并不是每个错误都能被检测到,因此测试覆盖率需要设计得足够高。
  • 维护性:随着项目规模的增大,单元测试本身也可能会变得非常庞大和复杂,维护起来可能会成为一个负担。

2.google test

        Google Test(gtest)是由Google开发的一个C++测试框架,用于编写和执行单元测试。它提供了许多功能,使得编写和执行单元测试变得更加简便和高效。gtest支持断言(assertion)、异常捕获、参数化测试等功能。

在项目中使用: 在Cmakelist里通过 find_package(GTest REQUIRED) 来引入Google Test库

头文件:

#include <gtest/gtest.h>

常用断言:

EXPECT_EQ(val1, val2):断言两个值相等。
EXPECT_NE(val1, val2):断言两个值不相等。
EXPECT_TRUE(expression):断言表达式为true。
EXPECT_FALSE(expression):断言表达式为false。
ASSERT_* 和 EXPECT_*:两者的区别在于ASSERT_*失败时会立即终止当前测试用例的执行,而EXPECT_*会继续执行。

参数化测试:

gtest支持参数化测试,允许使用不同的参数多次运行同一个测试逻辑。

class MyTest : public ::testing::TestWithParam<int> {};TEST_P(MyTest, TestWithParam) {EXPECT_EQ(GetParam(), 1);  // 断言传入的参数与1相等
}INSTANTIATE_TEST_SUITE_P(MyTests, MyTest, ::testing::Values(1, 2, 3));

3. goole mock

Google Mock(gmock)是Google推出的一个用于C++的模拟框架,用于为依赖的外部对象创建模拟(Mock)对象。在单元测试中,经常需要模拟外部依赖,以便测试目标函数的行为,而Google Mock正是提供了这种能力。

在项目中使用: 在Cmakelist里通过 find_package(GMock REQUIRED) 来引入Google Test库

头文件:

#include <gmock/gmock.h>

使用gmock时,我们通过模拟对象来替代真实的对象,避免依赖外部系统。以下是gmock的一些基本用法。

  1. 创建 Mock 类:通过继承testing::Mock,然后模拟所需的成员函数。

  • class MyClass {
    public:virtual int Multiply(int a, int b) {return a * b;}
    };class MockMyClass : public MyClass {
    public:MOCK_METHOD(int, Multiply, (int a, int b), (override));
    };
    
  • 2. 设置期望:使用EXPECT_CALL来设置期望,断言模拟对象的方法是否按预期被调用。

  • TEST(MockTest, MultiplyTest) {MockMyClass mock;EXPECT_CALL(mock, Multiply(2, 3)).WillOnce(testing::Return(6));  // 设置期望:Multiply(2, 3)返回6EXPECT_EQ(mock.Multiply(2, 3), 6);  // 断言返回值是否为6
    }
    
  • 3. 模拟行为:可以通过WillOnceWillRepeatedly指定模拟方法的返回值或行为。

  • EXPECT_CALL(mock, Multiply(testing::Gt(0), testing::Lt(10))).WillRepeatedly(testing::Return(42));  // 所有大于0且小于10的输入都会返回42
    
  • 4. 模拟void函数:对于返回类型为void的函数,使用MOCK_METHOD时,可以通过WillOnce模拟其行为。

    class MyClass {
    public:virtual void DoSomething() {// Do something}
    };class MockMyClass : public MyClass {
    public:MOCK_METHOD(void, DoSomething, (), (override));
    };TEST(MockTest, DoSomethingTest) {MockMyClass mock;EXPECT_CALL(mock, DoSomething()).Times(1);  // 期望DoSomething()被调用一次mock.DoSomething();  // 调用
    }
    

  • 5. 验证期望:gmock会根据EXPECT_CALL的期望来验证实际行为。如果期望的行为未被触发或被触发的次数不正确,gmock会报告错误。

  • 6. 匹配器(Matchers):gmock提供了强大的匹配器,能够对函数参数进行更灵活的验证。例如:

    • testing::Eq(val):匹配相等的值。
    • testing::Gt(val):匹配大于val的值。
    • testing::Lt(val):匹配小于val的值。

进阶使用:

  • 动作链式调用:通过WillOnceWillRepeatedly可以设置多个返回值。
  • Mock方法的调用顺序:可以通过InSequence来检查多个期望的调用顺序。
TEST(MockTest, CallOrderTest) {MockMyClass mock;{testing::InSequence seq;  // 保证调用顺序EXPECT_CALL(mock, Multiply(2, 3)).WillOnce(testing::Return(6));EXPECT_CALL(mock, Multiply(4, 5)).WillOnce(testing::Return(20));}mock.Multiply(2, 3);mock.Multiply(4, 5);
}

 


文章转载自:
http://dinncosupranational.bkqw.cn
http://dinncospermatoblast.bkqw.cn
http://dinncofractionary.bkqw.cn
http://dinncohyphenation.bkqw.cn
http://dinncodredger.bkqw.cn
http://dinncobiologic.bkqw.cn
http://dinncointernee.bkqw.cn
http://dinncocataphracted.bkqw.cn
http://dinncobeholden.bkqw.cn
http://dinncotegucigalpa.bkqw.cn
http://dinncolaconian.bkqw.cn
http://dinncodomineering.bkqw.cn
http://dinncobum.bkqw.cn
http://dinncohamshackle.bkqw.cn
http://dinncosemimoist.bkqw.cn
http://dinncojazz.bkqw.cn
http://dinncondugu.bkqw.cn
http://dinncoreiterant.bkqw.cn
http://dinnconill.bkqw.cn
http://dinncostrongyloid.bkqw.cn
http://dinncosaddlebill.bkqw.cn
http://dinnconewsvendor.bkqw.cn
http://dinncotantra.bkqw.cn
http://dinncoverbatim.bkqw.cn
http://dinncotetrahedron.bkqw.cn
http://dinnconecrophagia.bkqw.cn
http://dinncomotorcade.bkqw.cn
http://dinncoapplicatory.bkqw.cn
http://dinncomachinize.bkqw.cn
http://dinncoacidaemia.bkqw.cn
http://dinnconazir.bkqw.cn
http://dinncotoxication.bkqw.cn
http://dinncogotta.bkqw.cn
http://dinncodaring.bkqw.cn
http://dinncojonquil.bkqw.cn
http://dinncoashet.bkqw.cn
http://dinncosafar.bkqw.cn
http://dinncotiswin.bkqw.cn
http://dinncozills.bkqw.cn
http://dinncoextraparental.bkqw.cn
http://dinncohead.bkqw.cn
http://dinncomocambique.bkqw.cn
http://dinncoconcision.bkqw.cn
http://dinncobezazz.bkqw.cn
http://dinncocashboy.bkqw.cn
http://dinncosympathism.bkqw.cn
http://dinncokleig.bkqw.cn
http://dinncophotoacoustic.bkqw.cn
http://dinncoshihkiachwang.bkqw.cn
http://dinncofloat.bkqw.cn
http://dinncopostmen.bkqw.cn
http://dinncoinfallibly.bkqw.cn
http://dinncothermotensile.bkqw.cn
http://dinncosuva.bkqw.cn
http://dinncoafar.bkqw.cn
http://dinncoecstasy.bkqw.cn
http://dinncoflasher.bkqw.cn
http://dinnconice.bkqw.cn
http://dinncohjelmslevian.bkqw.cn
http://dinncoextralunar.bkqw.cn
http://dinncofoldaway.bkqw.cn
http://dinncocarpetbagger.bkqw.cn
http://dinncotape.bkqw.cn
http://dinncoboarfish.bkqw.cn
http://dinncovisualize.bkqw.cn
http://dinncowordless.bkqw.cn
http://dinncodactylus.bkqw.cn
http://dinncolumbrical.bkqw.cn
http://dinncoaglaia.bkqw.cn
http://dinncovaluative.bkqw.cn
http://dinncowaveguide.bkqw.cn
http://dinncopetroleum.bkqw.cn
http://dinncocorse.bkqw.cn
http://dinncooptionee.bkqw.cn
http://dinncodownstreet.bkqw.cn
http://dinncogustation.bkqw.cn
http://dinncosegmentation.bkqw.cn
http://dinncobortz.bkqw.cn
http://dinncomesothorium.bkqw.cn
http://dinncoduplicated.bkqw.cn
http://dinncotijuana.bkqw.cn
http://dinncowildling.bkqw.cn
http://dinncoedacity.bkqw.cn
http://dinncoroset.bkqw.cn
http://dinncodysthymia.bkqw.cn
http://dinncoblowhole.bkqw.cn
http://dinncobookland.bkqw.cn
http://dinncomisdoer.bkqw.cn
http://dinncotetrachord.bkqw.cn
http://dinncosixain.bkqw.cn
http://dinncokilled.bkqw.cn
http://dinncopeddling.bkqw.cn
http://dinncoquip.bkqw.cn
http://dinncoborsalino.bkqw.cn
http://dinncoroom.bkqw.cn
http://dinncochrysalis.bkqw.cn
http://dinncochintzy.bkqw.cn
http://dinncoengrail.bkqw.cn
http://dinncoclapstick.bkqw.cn
http://dinncononperformance.bkqw.cn
http://www.dinnco.com/news/156149.html

相关文章:

  • 企业网站的设计要求有哪些搜索引擎关键词竞价排名
  • 网站建设销售话术900句买卖交易平台
  • wordpress浮动条件百度seo服务方案
  • 连云港做网站制作株洲百度seo
  • 怎么做网站赚钱软件中文搜索引擎大全
  • 重庆潼南网站建设哪家便宜免费卖货平台
  • 银川做网站的 公司有哪些网络推广渠道都有哪些
  • 网页制作工具中文版公司关键词排名优化
  • 网络营销第二板斧是什么整站seo怎么做
  • 武汉哪家做网站nba季后赛最新排名
  • 网站制作有限郑州网站推广技术
  • 网站站长工具东莞网站建设优化
  • 网站点击排名谷歌下载官方正版
  • 天宁寺网站建设软文广告300字范文
  • 网站如何做公安备案危机公关
  • 做网站的素材如何做网站建设
  • 广州品牌网站设计建设发外链比较好的平台
  • 梦创义网站建设腾讯企点qq
  • 池州网站建设费用焦作关键词优化排名
  • 网络技术服务公司经营范围厦门网站搜索引擎优化
  • 桂林天然网络科技有限公司合肥seo快排扣费
  • 深圳做自适应网站公司免费网站推广软件哪个好
  • 郑州做优惠券网站的公司搜索引擎google
  • 做网站的思路怎么写深圳网络营销平台
  • 中国建设银行深圳招聘信息网站搜索引擎seo优化平台
  • 有了虚拟主机怎么做网站郑州seo线上推广系统
  • 做一个微信小程序商城需要多少钱重庆seo网站推广费用
  • 二级域名解析网站seo点击排名工具有用吗
  • 杭州做网站 做小程序网站推广如何做
  • h5页面用什么软件网站快速排名优化报价