GoogleTest 中的 Catch2 SECTION 等效项

问题描述 投票:0回答:1

Catch2 框架有 SECTION 的概念,这似乎使单元测试代码更具可读性。为了了解在 Catch2 与 GoogleTest 中编写某些测试有多容易,我正在尝试找出翻译给定 Catch2 示例代码的最佳方法

#include <catch2/catch_test_macros.hpp>

TEST_CASE( "vectors can be sized and resized", "[vector]" ) {

    std::vector<int> v{1, 2, 3, 4, 5};

    REQUIRE(v.size() == 5);
    REQUIRE(v.capacity() == 5);

    SECTION( "A) reserving bigger changes capacity but not size" )
    {
        v.reserve(10);
    
        REQUIRE(v.size() == 5);
        REQUIRE(v.capacity() >= 10);

        SECTION( "A.1) reserving down unused capacity does not change capacity" )
        {
            v.reserve(7);
            REQUIRE(v.size() == 5);
            REQUIRE(v.capacity() >= 10);
        }

        v[0] = 42;

        SECTION( "A.2) shrink_to_fit is a non binding request to reduce capacity() to size()")
        {
            v.shrink_to_fit();
            REQUIRE(v.capacity() >= v.size());
        }
    }
}

到谷歌测试。我目前有

#include <gtest/gtest.h>

#include <vector>

class VectorTest : public ::testing::Test
{
protected:
    void SetUp() override
    {
        EXPECT_EQ(v.size(), 5);
        EXPECT_EQ(v.capacity(), 5);
    }

    std::vector<int> v{1, 2, 3, 4, 5};
};

TEST_F(VectorTest, SectionA1)
{
    // reserving bigger changes capacity but not size
    v.reserve(10);
    EXPECT_EQ(v.size(), 5);
    EXPECT_GE(v.capacity(), 10);

    // reserving down unused capacity does not change capacity
    v.reserve(7);
    EXPECT_EQ(v.size(), 5);
    EXPECT_GE(v.capacity(), 10);

    v[0] = 42;
}

TEST_F(VectorTest, SectionA2)
{
    // reserving bigger changes capacity but not size
    v.reserve(10);
    EXPECT_EQ(v.size(), 5);
    EXPECT_GE(v.capacity(), 10);

    v[0] = 42;

    // shrink_to_fit is a non binding request to reduce capacity() to size()
    v.shrink_to_fit();
    EXPECT_GE(v.capacity(), v.size());
}

这似乎比 Catch2 代码更冗长且可读性更差。

我想知道是否还有其他更优雅/可读/更短的方法来做到这一点?

如果“否”,那么这将是使用 Catch2 的一个论据。

c++ unit-testing googletest catch2
1个回答
0
投票

几乎一样:

TEST(VectorTest, Resize) {
    std::vector<int> v{1, 2, 3, 4, 5};

    EXPECT_EQ(v.size(), 5);
    EXPECT_EQ(v.capacity(), 5);

    {
        SCOPED_TRACE("A) reserving bigger changes capacity but not size")
        v.reserve(10);
    
        EXPECT_EQ(v.size(), 5);
        EXPECT_GE(v.capacity(), 10);

        {
            SCOPED_TRACE("A.1) reserving down unused capacity does not change capacity")
            v.reserve(7);
            EXPECT_EQ(v.size(), 5);
            EXPECT_GE(v.capacity(), 10);
        }

        v[0] = 42;

        {
            SCOPED_TRACE("A.2) shrink_to_fit is a non binding request to reduce capacity() to size()")
            v.shrink_to_fit();
            EXPECT_EQ(v.capacity(), v.size());
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.