gpt4 book ai didi

c++ - 测试如何验证特定功能是否已执行

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:27 25 4
gpt4 key购买 nike

我需要验证一个(重)函数是否只在正确的输入上执行。有一些简单的方法可以做到这一点吗?

目前我看到了两条前进的道路

  1. 使用仅用于测试的额外参数修改函数

  2. 将函数包装在可以跟踪执行的东西中并用它来替换函数

1 比较丑,我不知道怎么做 2

例子:

例如,我想测试当 a<=3

时这里没有执行 heavy
void function_to_test(int a){
if(a>3){
heavy();
}
}

最佳答案

这是一个如何使用 gtest 编写单元测试的示例。

class Turtle {
virtual ~Turtle() {}
virtual void PenUp() = 0;
virtual void PenDown() = 0;
virtual void Forward(int distance) = 0;
virtual void Turn(int degrees) = 0;
virtual void GoTo(int x, int y) = 0;
virtual int GetX() const = 0;
virtual int GetY() const = 0;
};

#include "gmock/gmock.h" // Brings in Google Mock.
class MockTurtle : public Turtle {
public:
...
MOCK_METHOD0(PenUp, void());
MOCK_METHOD0(PenDown, void());
MOCK_METHOD1(Forward, void(int distance));
MOCK_METHOD1(Turn, void(int degrees));
MOCK_METHOD2(GoTo, void(int x, int y));
MOCK_CONST_METHOD0(GetX, int());
MOCK_CONST_METHOD0(GetY, int());
};

#include "path/to/mock-turtle.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
using ::testing::AtLeast; // #1

TEST(PainterTest, CanDrawSomething) {
MockTurtle turtle; // #2
EXPECT_CALL(turtle, PenDown()) // #3
.Times(AtLeast(1));

Painter painter(&turtle); // #4

EXPECT_TRUE(painter.DrawCircle(0, 0, 10));
} // #5

int main(int argc, char** argv) {
// The following line must be executed to initialize Google Mock
// (and Google Test) before running the tests.
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}

更多文档在下面的链接中

https://github.com/google/googletest/blob/master/googlemock/docs/ForDummies.md

关于c++ - 测试如何验证特定功能是否已执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39264748/

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