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

go语言网站开发教程大学生网站作业

go语言网站开发教程,大学生网站作业,网站开发参考文献格式,企业邮箱怎么注册自己的账号目录 编译和安装框架使用AssertionsGoogle TestingGoogle MockingMatchersActions 运行结果 最近在写项目的时候#xff0c;学到了许多关于软件测试的知识#xff0c;也不断的使用新的测试框架和测试工具#xff0c;每次总是机械式的拼接其他人的代码#xff0c;代码发生错… 目录 编译和安装框架使用AssertionsGoogle TestingGoogle MockingMatchersActions 运行结果 最近在写项目的时候学到了许多关于软件测试的知识也不断的使用新的测试框架和测试工具每次总是机械式的拼接其他人的代码代码发生错误也不知道怎么解决因此我打算直接将其学一遍以便为了更灵活的写测试代码 编译和安装 下载地址Google Test Github网站 然后直接在CMakeLists.txt引入就好了 include_directories(include) # 设置include路径set(CXXFLAGS -stdc11 -lgtest -lpthread) add_compile_options(${CXXFLAGS})target_link_libraries(test gtest pthread) # 链接gtest静态库框架使用 框架的使用主要分为几个模块Assertions、Google Testing、Google Mocking、Matchers、Actions Assertions 这一部分主要是一些断言和比较宏定义内容较多以下是一部分想看全部的可以去看源码 这一部分理解比较简单不做概述 #define EXPECT_THROW(statement, expected_exception) \GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) #define EXPECT_NO_THROW(statement) \GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) #define EXPECT_ANY_THROW(statement) \GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) #define ASSERT_THROW(statement, expected_exception) \GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) #define ASSERT_NO_THROW(statement) \GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) #define ASSERT_ANY_THROW(statement) \GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)Google Testing 这部分是框架的主要部分也是开发人员接触最多的地方 首先来介绍三个常用的宏TEST、TEST_F、TEST_P TEST一般测试在其内部设置断言 TestSuiteName定义了测试套件名称TestName定义了自定义测试名 注意这两个的命名不要包括下划线_ TEST(TestSuiteName, TestName) {// statements }TEST_F多样测试就是多种不同情况的测试中都会使用相同一份的测试数据的情况 TEST_P(TestFixtureName, TestName) {// statements }TEST_P值参数化测试自动化产生输入参数进行测试 TEST_P(TestFixtureName, TestName) {// statements }以TEST_P为例写一个小demo 首先定义一个测试套件类在其中定义要产生测试输入参数的类型 // 其中TestWithParam从Test类和WithParamInterface类派生来的这两个类是必要的 class FooTest : public ::testing::TestWithParamint {};产生自动化输入参数结构 INSTANTIATE_TEST_CASE_P(InstantiationName, // 此处自定义名称FooTest, // 测试套件类::testing::Values(1, 2, 3));第三个参数是可更改的比如Range、Bool、ValuesIn、Values INSTANTIATE_TEST_SUITE_P(MyInstantiation, MyTestSuite,testing::Values(...),[](const testing::TestParamInfoMyTestSuite::ParamType info) {// Can use info.param here to generate the test suffixstd::string name ...return name;});要注意的是Combine它会把其中的变量组成一个联合排列输入参数确保支持tr/tupleT特性 class Bis {bool Even(int dd) {}bool Suc(bool dc) {} };class CombineTest : public ::testing::TestWithParam ::testing::tuplebool, int { protected:bool CheckData() {bool dc ::testing::get0(GetParam());int dd ::testing::get1(GetParam());return bis.Suc(dc) bis.Even(dd);} private:Bis bis; }TEST_P(MyCombineTest, CombineTestUnit) {EXPECT_TRUE(CheckData()); }INSTANTIATE_TEST_CASE_P(TestBisValuesCombine, CombineTest, ::testing::Combine(::testing::Bool(), ::testing::Values(3, 4)));最后在TEST_P中写测试代码 bool IsPrime(int n) {return n 0; }TEST_P(FooTest, DoesBlah) {// Inside a test, access the test parameter with the GetParam() method// of the TestWithParamT class://在测试中使用TestWithParam T类的GetParam方法访问测试参数int n GetParam();EXPECT_TRUE(IsPrime(n));// ... }其他部分API用的时候直接看官网就好了主体是这三个API其他基本上都是辅助宏 Google Mocking 有点类似于伪装接口一般情况下用不着不做概述 Matchers 有点类似于前面的断言直接看部分源码在gmok-matchers.h文件中 inline PolymorphicMatcherinternal::StrEqualityMatcherstd::wstring StrEq(const std::wstring str) {return MakePolymorphicMatcher(internal::StrEqualityMatcherstd::wstring(str, true, true)); }// Matches a string not equal to str. inline PolymorphicMatcherinternal::StrEqualityMatcherstd::wstring StrNe(const std::wstring str) {return MakePolymorphicMatcher(internal::StrEqualityMatcherstd::wstring(str, false, true)); }// Matches a string equal to str, ignoring case. inline PolymorphicMatcherinternal::StrEqualityMatcherstd::wstring StrCaseEq(const std::wstring str) {return MakePolymorphicMatcher(internal::StrEqualityMatcherstd::wstring(str, true, false)); }Actions 这玩意也是一个和断言差不多的东西看部分源码 template size_t k, typename Ptr struct SaveArgAction {Ptr pointer;template typename... Argsvoid operator()(const Args... args) const {*pointer std::getk(std::tie(args...));} };template size_t k, typename Ptr struct SaveArgPointeeAction {Ptr pointer;template typename... Argsvoid operator()(const Args... args) const {*pointer *std::getk(std::tie(args...));} };运行结果 下面来看看一个普通测试套件的运行结果 #include gtest/gtest.h #include stdint.h #include stdio.hint Add(uint32_t a, uint32_t b) {return a b; }TEST(LLT, MAIN) {EXPECT_EQ(Add(1U, 1U), 1U); }int main(int argc, char **argv) {testing::InitGoogleTest(argc, argv);return RUN_ALL_TESTS(); }ubuntuVM-8-16-ubuntu:~/finale/llt/build$ ./test [] Running 1 test from 1 test suite. [----------] Global test environment set-up. [----------] 1 test from LLT [ RUN ] LLT.MAIN /home/ubuntu/finale/llt/src/test_main.cc:17: Failure Expected equality of these values:add(1U, 1U)Which is: 21UWhich is: 1 [ FAILED ] LLT.MAIN (0 ms) [----------] 1 test from LLT (0 ms total)[----------] Global test environment tear-down [] 1 test from 1 test suite ran. (0 ms total) [ PASSED ] 0 tests. [ FAILED ] 1 test, listed below: [ FAILED ] LLT.MAIN1 FAILED TEST这个框架自定义的界面还是很好看的
http://www.pierceye.com/news/440220/

相关文章:

  • 深圳做网站好的公司wordpress建菜单
  • 网站编辑需要的技能做网站需要什么域名
  • 营销型网站建设目的和意义网站托管方案
  • 网站感谢页面企业标志图片大全
  • 响应式网站建设必推全网天下邵阳竞价网站建设设计
  • 大连网站如何制作辽阳公司做网站
  • 百度站长怎么验证网站jekyll做公司网站
  • 电子商务公司建设网站方案设计网站建设开发背景
  • 同一产品做多个网站山西省住房和城乡建设厅官网
  • 网站建设的流程是什么意思微信小程序的代码
  • 广州网站整站优化html项目案例实战
  • 宁波网站推广方式seo优化按天扣费
  • 紫金优化网站制作python编程100例
  • 原阳网站建设哪家好域名网址
  • 西安学校网站建设wordpress手机端模板下载
  • 泉州网站建设工作室网站上的产品板块
  • 平顶山网站网站建设网页设计与制作教程 刘瑞信 pdf
  • 网站开发深天津设计公司排行榜
  • 做tcf法语听力题的网站公司网页简介
  • 十堰做网站最专业的公司深圳企业网查询
  • 购物网站大全排名调查drupal与wordpress哪个容易
  • 网站建设彳金手指排名网站开发完没人运营
  • 网站建设是设开发公司质量管理流程
  • 金沙网站怎么做代理wordpress tag=
  • 做网站必须花钱吗建筑人才网证书查询
  • 0基础网站建设模板工商注册官方网站
  • 河南网站设计公司价格网站在建设中是什么意思
  • 网站建设公司的成本有哪些方面四川省城乡建设网查询
  • 和什么人合作做游戏视频网站做推送网站
  • 做竞价网站访问突然变少施工企业负责人带班检查计划