gpt4 book ai didi

c++ - 如何为复杂算法编写 ut

转载 作者:行者123 更新时间:2023-11-28 03:23:57 26 4
gpt4 key购买 nike

我想为一个包含许多步骤的复杂算法编写 ut。例如,如下所示的算法类。我想测试每一步。但很明显我可以处理私有(private)函数。我正在使用谷歌 gtest。

如何设计UT?

Class Algorithm
{private:
PreProcess();
Process();
PostProcess();
}

最佳答案

Google Test documentation 中有一个特定的部分处理测试私有(private)代码。

简而言之,尽量避免测试非公开函数。如果必须,那么您可以更改类设计,或者让您的测试成为类的 friend 。

GTest 为最后一个选项提供了一个辅助宏:FRIEND_TEST,但要注意命名空间问题。您的测试需要在与正在测试的类相同的命名空间中定义,此宏才能工作。

所以像这样:

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

class Algorithm {
private:
bool PreProcess() { std::cout << "Pre\n"; return true; }
bool Process() { std::cout << "Process\n"; return true; }
bool PostProcess() { std::cout << "Post\n"; return true; }
FRIEND_TEST(AlgorithmPrivateTest, PreProcess);
FRIEND_TEST(AlgorithmPrivateTest, Process);
FRIEND_TEST(AlgorithmPrivateTest, PostProcess);
};

class AlgorithmPrivateTest : public testing::Test {
protected:
AlgorithmPrivateTest() : algorithm_() {}
Algorithm algorithm_;
};

TEST_F(AlgorithmPrivateTest, PreProcess) {
EXPECT_TRUE(algorithm_.PreProcess());
}

TEST_F(AlgorithmPrivateTest, Process) {
EXPECT_TRUE(algorithm_.Process());
}

TEST_F(AlgorithmPrivateTest, PostProcess) {
EXPECT_TRUE(algorithm_.PostProcess());
}

int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

关于c++ - 如何为复杂算法编写 ut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14659715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com