gtest

2019-02-18  本文已影响0人  downdemo

配置

示例

#include <iostream>
#include <gtest/gtest.h>

int f(int n)
{
    return n + 1;
}

TEST(testCase, case0)
{
    EXPECT_EQ(1, f(0));
    ASSERT_EQ(2, f(1));
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    std::cin.get();
}
error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”
#include <iostream>
#include <gtest/gtest.h>

int f(int n)
{
    return n + 1;
}

TEST(testCase, case0)
{
    EXPECT_EQ(1, f(0));
    EXPECT_EQ(2, f(1));
}

TEST(testCase, case1)
{
    EXPECT_EQ(11, f(0));
    EXPECT_EQ(22, f(1));
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    std::cin.get();
}

常用宏

ASSERT_TRUE(condition);
ASSERT_FALSE(condition);
ASSERT_EQ(expected, actual);
ASSERT_NE(expected, actual);
ASSERT_GT(expected, actual);
ASSERT_LT(expected, actual);
ASSERT_GE(expected, actual);
ASSERT_LE(expected, actual);
ASSERT_STREQ(expected, actual);
ASSERT_STRNE(expected, actual);
ASSERT_FLOAT_EQ(expected, actual);
ASSERT_DOUBLE_EQ(expected, actual);
ASSERT_NEAR(val1, val2, abs_error);
ASSERT_DEATH(statement, regex);

EXPECT_* // 同上

值参数化测试

#include <iostream>
#include <gtest/gtest.h>

bool isOdd(int n)
{
    return n % 2;
}

class ParamTest : public ::testing::TestWithParam<int> {};

TEST_P(ParamTest, case0)
{
    EXPECT_TRUE(isOdd(GetParam())); // 多次EXPECT_TRUE
}

INSTANTIATE_TEST_CASE_P(TestSuite, ParamTest, ::testing::Values(1, 3, 5, 7, 9));

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    std::cin.get();
}

全局事件

#include <iostream>
#include <gtest/gtest.h>

class GlobalEnv : public ::testing::Environment
{
public:
    virtual void SetUp() override
    {
        std::cout << "GlobalEnv::SetUp()" << std::endl;
    }
    virtual void TearDown() override
    {
        std::cout << "GlobalEnv::TearDown()" << std::endl;
    }
};

TEST(TestCase, case0)
{
    EXPECT_EQ(1, 2);
}

TEST(TestCase, case1)
{
    EXPECT_EQ(1, 3);
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::Environment* env = new GlobalEnv();
    ::testing::AddGlobalTestEnvironment(env);
    RUN_ALL_TESTS();
    std::cin.get();
}

fixture

#include <iostream>
#include <gtest/gtest.h>#include <iostream>
#include <gtest/gtest.h>

class TestSuite : public ::testing::Test
{
public:
    static void SetUpTestCase()
    {
        std::cout << "SetUpTestCase()" << std::endl;
    }
    static void TearDownTestCase()
    {
        std::cout << "TearDownTestCase()" << std::endl;
    }
    virtual void SetUp() override
    {
        std::cout << "TestSuite::SetUp()" << std::endl;
    }
    virtual void TearDown() override
    {
        std::cout << "TestSuite::TearDown()" << std::endl;
    }
};

TEST_F(TestSuite, case0)
{
    EXPECT_EQ(1, 2);
}

TEST_F(TestSuite, case1)
{
    EXPECT_EQ(1, 3);
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    std::cin.get();
}

class TestSuite : public ::testing::Test
{
public:
    static void SetUpTestCase()
    {
        std::cout << "SetUpTestCase()" << std::endl;
    }
    static void TearDownTestCase()
    {
        std::cout << "TearDownTestCase()" << std::endl;
    }
    virtual void SetUp() override
    { // 这里还可以构造对象,比如auto p = new Widget;
        std::cout << "TestSuite::SetUp()" << std::endl;
    }
    virtual void TearDown() override
    { // 这里还可以析构对象,比如delete p;
        std::cout << "TestSuite::TearDown()" << std::endl;
    }
};

TEST_F(TestSuite, case0)
{
    EXPECT_EQ(1, 2);
}

TEST_F(TestSuite, case1)
{
    EXPECT_EQ(1, 3);
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    std::cin.get();
}

结合使用

#include <iostream>
#include <gtest/gtest.h>

class GlobalEnv : public ::testing::Environment
{
public:
    virtual void SetUp() override
    {
        std::cout << "GlobalEnv::SetUp()" << std::endl;
    }
    virtual void TearDown() override
    {
        std::cout << "GlobalEnv::TearDown()" << std::endl;
    }
};

class TestSuite : public ::testing::Test
{
public:
    static void SetUpTestCase()
    {
        std::cout << "SetUpTestCase()" << std::endl;
    }
    static void TearDownTestCase()
    {
        std::cout << "TearDownTestCase()" << std::endl;
    }
    virtual void SetUp() override
    {
        std::cout << "TestSuite::SetUp()" << std::endl;
    }
    virtual void TearDown() override
    {
        std::cout << "TestSuite::TearDown()" << std::endl;
    }
};

TEST(TestCase, case0)
{
    EXPECT_EQ(1, 2);
}

TEST(TestCase, case1)
{
    EXPECT_EQ(1, 3);
}

TEST_F(TestSuite, case0)
{
    EXPECT_EQ(1, 2);
}

TEST_F(TestSuite, case1)
{
    EXPECT_EQ(1, 3);
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::Environment* env = new GlobalEnv();
    ::testing::AddGlobalTestEnvironment(env);
    RUN_ALL_TESTS();
    std::cin.get();
}
上一篇 下一篇

猜你喜欢

热点阅读