C++-(20)-GoogleTest

1.安装环境 VS2019安装gtest安装包
    


2.TEST     测试成员变量
   

//1.添加头文件
//2.被测试的类、函数、结构
//3.测试函数 test_case_name(group 一组测试),test_name(item 函数名)
//4.主函数 输出宏EXPECT_EQ
#include "pch.h"
#include <iostream>
#include <gtest/gtest.h>

struct BankAccount
{
    int balance=1;
    BankAccount(){}
    explicit BankAccount(const int balance)// explicit 类构造函数
      :balance{ balance } { }
};

TEST(AccountTest,BankAccountStartsEmpty)
{
    BankAccount account;
    EXPECT_EQ(0, account.balance);
}

int main(int argc, char* argv[])
{
    testing::InitGoogleTest(&argc,argv);//&argc, argv 这两个参数是干什么?
    return RUN_ALL_TESTS();
}


3.TEST_F 测试函数
 

struct BankAccount
{
    //构造函数
    int balance=1;
    BankAccount()
    {
     }
    explicit BankAccount(const int balance)// explicit 类构造函数
      :balance{ balance } 
    {
    }
   virtual void deposit(int amount)
    {
        balance += amount;
    }
  
};


//测试:测试函数返回值
TEST_F(BankAccountTest, CanDepositMoney)
{
    account->deposit(100);
    EXPECT_EQ(100, account->balance);
}



4.TEST_P测试有参函数
 

//1.需要被测试的类 BankAccount
//2.测试类:BankAccountTest:testing::Test
//3.测试的参数:account_state
//4.带参数的测试类:withdrawAccountTest
//struct withdrawAccountTest :BankAccountTest, 继承于testing testing::WithParamInterface<account_state>
//5.测试入口:TEST_P(withdrawAccountTest, FinalBalance)
//6.初始化带参数的测试环境 INSTANTIATE_TEST_CASE_P

//1.需要被测试的类 BankAccount
struct BankAccount
{
    //构造函数
    int balance=1;
    BankAccount()
    {
     }
    explicit BankAccount(const int balance)// explicit 类构造函数
      :balance{ balance } 
    {
    }
   virtual void deposit(int amount)
    {
        balance += amount;
    }
   //
   bool withdraw(int withdraw_amount)
   {
       if (withdraw_amount <= balance)
       {
           balance -= withdraw_amount;
           return true;
       }
       return false;
   }
};
//2.测试类:BankAccountTest:testing::Test
struct BankAccountTest :testing::Test
{
    BankAccount* account;
    BankAccountTest()
    {
        account = new BankAccount;
    }
    ~BankAccountTest()
    {
        delete account;
    }
};
//3.测试的参数:account_state
struct account_state
{
    int initial_balance;
    int withdraw_amount;
    int final_balance;
    bool  success;
    friend std::ostream& operator <<(std::ostream& os, const account_state& obj)
    {
        return os
            << "initial_balance:" << obj.initial_balance
            << "withdraw_amount:" << obj.withdraw_amount
            << "final_balance:" << obj.final_balance
            << "success:" << obj.success;
    }
};

// 输入的参数 account_state
// testing::GetParam()里有这个得到参数的函数
// testing::WithParamInterface<account_state>
struct withdrawAccountTest :BankAccountTest, testing::WithParamInterface<account_state>
{
    withdrawAccountTest()
    {
        account->balance = GetParam().initial_balance;
    }
};
//5.测试入口
TEST_P(withdrawAccountTest, FinalBalance)
{
    //调用参数
    auto as = GetParam();   
    auto success = account->withdraw(as.withdraw_amount);
    EXPECT_EQ(as.final_balance, account->balance);
    EXPECT_EQ(as.success, success);
}
//6.初始化带参数的测试环境 INSTANTIATE_TEST_CASE_P
INSTANTIATE_TEST_CASE_P(Default, withdrawAccountTest,
    testing::Values(
        account_state{ 100,50,50,true },     //正确的
        account_state{ 100,200,100 ,false}));//错误的

//argc 统计程序运行时发送给main函数的命令行参数的个数
//argv 用来存放指向的字符串参数的指针数组
int main(int argc, char* argv[])
{
    //1.初始化
    testing::InitGoogleTest(&argc,argv);//&argc, argv 这两个参数是干什么?
    return RUN_ALL_TESTS();
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值