zoukankan      html  css  js  c++  java
  • CPP(c++) google gtest

    Google的开源C++单元测试框架Google Test,简称gtest。

    建议直接参考: https://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

    #include<gtest/gtest.h>
    int Abs(int x)
    {
         return x > 0 ? x : -x;
    }
    TEST(IsAbsTest,HandlerTrueReturn)
    {
        ASSERT_TRUE(Abs(1) == 1) << "Abs(1)=1";  //ASSERT_TRUE期待结果是true,operator<<输出一些自定义的信息
        ASSERT_TRUE(Abs(-1) == 1) << "Abs(-1)=1";
        ASSERT_FALSE(Abs(-2) == -2);  //期待结果是false
        ASSERT_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(TestSuiteName,TestCaseName)
    {
        EXPECT_*(**);//  失败时,案例继续往下执行。
        ASSERT_*(**);//  失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行。
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }

    功能二:事件机制

    1)全局的,所有案例执行前后。
    class FooEnvironment : public testing::Environment
    {
    public:
        virtual void SetUp()  // SetUp()方法在所有案例执行前执行
        {
            std::cout << "Foo FooEnvironment SetUP" << std::endl;
        }
        virtual void TearDown() //TearDown()方法在所有案例执行后执行
        {
            std::cout << "Foo FooEnvironment TearDown" << std::endl;
        }
    };
    int _tmain(int argc, _TCHAR* argv[])
    
    {
        testing::AddGlobalTestEnvironment(new FooEnvironment);
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
    2)TestSuite级别的,在某一批案例中第一个案例前,最后一个案例执行后。
    
    class FooTest : public testing::Test {
     protected:
      static void SetUpTestCase() { //在第一个TestCase之前执行
        shared_resource_ = new ;
      }
      static void TearDownTestCase() { //最后一个TestCase之后执行
        delete shared_resource_;
        shared_resource_ = NULL;
      }
      // Some expensive resource shared by all tests.
      static T* shared_resource_;
    };
    
    TEST_F(FooTest, Test1) //第一个TestCase
    {
        // you can refer to shared_resource here 
    }
    TEST_F(FooTest, Test2) //第二个TestCase
    {
        // you can refer to shared_resource here 
    }
    3)TestCase事件是挂在每个案例执行前后的,实现方式和上面的几乎一样,不过需要实现的是SetUp方法和TearDown方法:
    class FooCalcTest:public testing::Test
    {
    protected:
        virtual void SetUp()  //在每个TestCase之前执行
        {
            m_foo.Init();
        }
        virtual void TearDown()
        {
            m_foo.Finalize();  //在每个TestCase之后执行
        }
    
        FooCalc m_foo;
    };
    
    TEST_F(FooCalcTest, HandleNoneZeroInput)
    {
        EXPECT_EQ(4, m_foo.Calc(12, 16));
    }
    
    TEST_F(FooCalcTest, HandleNoneZeroInput_Error)
    {
        EXPECT_EQ(5, m_foo.Calc(12, 16));
    }

    功能三:参数化测试

    TEST(IsPrimeTest, HandleTrueReturn)
    {
        EXPECT_TRUE(IsPrime(3));
        EXPECT_TRUE(IsPrime(5));
        EXPECT_TRUE(IsPrime(11));
        EXPECT_TRUE(IsPrime(23));
        EXPECT_TRUE(IsPrime(17));
    }
    
    改成:
    TEST_P(IsPrimeParamTest, HandleTrueReturn)
    {
        int n =  GetParam();
        EXPECT_TRUE(IsPrime(n));
    }
    INSTANTIATE_TEST_CASE_P(TrueReturn, IsPrimeParamTest, testing::Values(3, 5, 11, 23, 17));

    功能四:死亡测试和运行参数 ... 

    ASSERT_DEATH(statement, regex`);
    ASSERT_EXIT(statement, predicate, regex`);
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        testing::GTEST_FLAG(output) = "xml:";
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
  • 相关阅读:
    php弱类型比较
    sql手注例子
    XFF等使用burp伪造请求
    XXE任意文件读取(当xml解析内容有输出时)
    本地文件包含LFI
    Java的访问修饰符的作用范围
    如何用“与”,“或”,“非” 实现 “异或”运算?
    windows下安装rabbitMQ教程(实战可用)
    注解@RequestParam与@RequestBody,@PathVariable的使用介绍
    maven install命令的用处(项目A依赖项目B,项目B发生修改,此时如果项目A打包引用修改后的B项目场景)
  • 原文地址:https://www.cnblogs.com/heimazaifei/p/12176798.html
Copyright © 2011-2022 走看看