Catch2 SECTIONs 等同于 GoogleTest

Catch2 SECTIONs equivalent in GoogleTest

提问人:Bart Vandewoestyne 提问时间:10/23/2023 更新时间:10/24/2023 访问量:78

问:

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());
        }
    }
}

到 GoogleTest。我目前有

#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++ 单元测试 googletest catch2

评论


答:

-1赞 273K 10/24/2023 #1

非常相似:

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());
        }
    }
}

评论

0赞 Xarn 11/12/2023
这实际上是非常错误的。