当前位置: 首页 > news >正文

GoogleTest 单元测试

假设我们有两个函数 complexFunction 和 helperFunction,其中 complexFunction 调用了 helperFunction。我们将编写测试 complexFunction 的单元测试,并在调用 helperFunction 的地方打桩。

// 复杂函数示例
int helperFunction(int x) {return x * 2;
}// 调用了 helperFunction 的复杂函数
int complexFunction(int a, int b) {if (a > 0) {for (int i = 0; i < a; ++i) {if (i % 2 == 0) {b += helperFunction(i);}}} else {b = -1;}return b;
}

现在,我们将编写一个单元测试来测试 complexFunction 并在调用 helperFunction 的地方打桩。

#include <gtest/gtest.h>
#include <gmock/gmock.h>// 导入要测试的函数
#include "complex_function.h" // 假设你的函数保存在 complex_function.h 文件中// 引入命名空间
using ::testing::Return;// 模拟 helperFunction 函数
class MockHelperFunction {
public:MOCK_METHOD(int, helperFunction, (int), (const));
};// 单元测试套件
class ComplexFunctionTest : public ::testing::Test {
protected:// 在每个测试用例运行之前调用void SetUp() override {// 可以在这里进行初始化操作}// 在每个测试用例运行之后调用void TearDown() override {// 可以在这里进行资源释放等操作}// 模拟的 helperFunctionMockHelperFunction mock_helper;
};// 测试用例:测试 complexFunction 函数
TEST_F(ComplexFunctionTest, TestComplexFunction) {// 准备测试数据int a = 3, b = 2;// 设置预期调用EXPECT_CALL(mock_helper, helperFunction(::testing::_)).Times(3).WillRepeatedly(Return(4)); // 模拟 helperFunction 返回值// 调用 complexFunction 函数int result = complexFunction(a, b);// 验证结果EXPECT_EQ(result, 14);
}// 运行所有测试
int main(int argc, char **argv) {// 初始化 Google 测试::testing::InitGoogleTest(&argc, argv);// 运行所有测试用例return RUN_ALL_TESTS();
}

// 函数的测试
#include <gtest/gtest.h>
#include <array>#include "geoalg.h"TEST(Vector2DTest, Subtract) 
{const std::array<double, 2> v0 = {3.0, 4.0};const std::array<double, 2> v1 = {1.0, 2.0};std::array<double, 2> result = v0 - v1;std::array<double, 2> expected = {2.0, 2.0};EXPECT_EQ(result, expected);
}TEST(Vector2DTest, Add) 
{const std::array<double, 2> v0 = {3.0, 4.0};const std::array<double, 2> v1 = {1.0, 2.0};std::array<double, 2> result = v0 + v1;std::array<double, 2> expected = {4.0, 6.0};EXPECT_EQ(result, expected);
}TEST(Vector2DTest, MultiplyByScalar) 
{const std::array<double, 2> v = {3.0, 4.0};double a = 2.0;std::array<double, 2> result = a * v;std::array<double, 2> expected = {6.0, 8.0};EXPECT_EQ(result, expected);
}TEST(Vector2DTest, DivideByScalar) 
{const std::array<double, 2> v = {6.0, 8.0};double a = 2.0;std::array<double, 2> result = v / a;std::array<double, 2> expected = {3.0, 4.0};EXPECT_EQ(result, expected);//double b = 0.0;//std::array<double, 2> u = {6.0, 8.0};//ASSERT_THROW({u / b;}, std::runtime_error);//ASSERT_THROW({u /= b;}, std::runtime_error);}TEST(Vector2DTest, CrossProduct) 
{const std::array<double, 2> v0 = {3.0, 4.0};const std::array<double, 2> v1 = {1.0, 2.0};double result = cross(v0, v1);EXPECT_EQ(result, 2.0);
}TEST(Vector2DTest, DotProduct) 
{const std::array<double, 2> v0 = {3.0, 4.0};const std::array<double, 2> v1 = {1.0, 2.0};double result = dot(v0, v1);EXPECT_EQ(result, 11.0);
}TEST(Vector2DTest, SquaredLength) 
{std::array<double, 2> v = {3.0, 4.0};double result = squared_length(v);EXPECT_EQ(result, 25.0);
}TEST(Vector2DTest, Length) 
{const std::array<double, 2> v = {3.0, 4.0};double result = length(v);EXPECT_DOUBLE_EQ(result, 5.0);
}TEST(Vector3DTest, CrossProduct)
{const std::array<double, 3> v0 = {1.0, 2.0, 3.0};const std::array<double, 3> v1 = {4.0, 5.0, 6.0};std::array<double, 3> result = cross(v0, v1);std::array<double, 3> expected = {-3.0, 6.0, -3.0};EXPECT_EQ(result, expected);}TEST(Vector3DTest, DotProduct) 
{const std::array<double, 3> v0 = {1.0, 2.0, 3.0};const std::array<double, 3> v1 = {4.0, 5.0, 6.0};double result = dot(v0, v1);double expected = 32.0;EXPECT_EQ(result, expected);
}TEST(Vector3DTest, SquaredLength) {const std::array<double, 3> v = {3.0, 4.0, 12.0};double result = squared_length(v);double expected = 169.0;EXPECT_EQ(result, expected);
}TEST(Vector3DTest, Length) 
{const std::array<double, 3> v = {3.0, 4.0, 12.0};double result = length(v);double expected = 13.0;EXPECT_EQ(result, expected);
}TEST(VectorBarycenter, Barycenter) 
{const std::array<double, 3> p0 = {1.0, 2.0, 3.0};const std::array<double, 3> p1 = {4.0, 5.0, 6.0};const std::array<double, 3> p2 = {7.0, 8.0, 9.0};const std::array<double, 3> p3 = {10.0, 11.0, 12.0};std::array<double, 3> result = barycenter(p0, p1);std::array<double, 3> expected = {2.5, 3.5, 4.5};EXPECT_EQ(result, expected);result = barycenter(p0, p1, p2);expected = {4.0, 5.0, 6.0};EXPECT_EQ(result, expected);result = barycenter(p0, p1, p2, p3);expected = {6.5, 7.75, 9.0};EXPECT_EQ(result, expected);
}add_executable(test_geoalg test_geoalg.cpp)
target_link_libraries(test_geoalg GTest::gtest_main${CSCEC_LIBRARIES}
)class TetMeshTest : public ::testing::Test{protected:void SetUp(){   mesh.from_one_tetrahedron();auto data = mesh.data();std::cout << mesh << std::endl;}public:TetMesh mesh;}; // end of classTEST_F(TetMeshTest, NumberOfEntities){EXPECT_EQ(mesh.number_of_nodes(),4);EXPECT_EQ(mesh.number_of_cells(),1);}
http://www.lryc.cn/news/295344.html

相关文章:

  • Mac利用brew安装mysql并设置初始密码
  • R语言入门笔记2.2
  • 一般系统的请求认证授权思路【gateway网关+jwt+redis+请求头httpheader】
  • c# 正则表达式 帮助类
  • 告别mPDF迎来TCPDF和中文打印遇到的问题
  • mysql 多数据源
  • uniapp 使用renderjs引入echarts
  • hr最讨厌这6种应届生简历❌
  • 【Linux笔记】文件系统与软硬链接
  • vue3(笔记)
  • Java面向对象 this
  • 阿里云游戏服务器租用价格表,2024最新报价
  • 2-1 动手学深度学习v2-Softmax回归-笔记
  • laravel distinct查询问题,laravel子查询写法
  • AI助力农作物自动采摘,基于DETR(DEtection TRansformer)开发构建作物生产场景下番茄采摘检测计数分析系统
  • C语言——字符串大小写互换
  • macOS的设置与常用软件(含IntelliJ IDEA 2023.3.2 Ultimate安装,SIP的关闭与开启)
  • http伪造本地用户字段系列总结
  • Hadoop-IDEA开发平台搭建
  • block任务块、rescue和always、loop循环、role角色概述、role角色应用、ansible-vault、sudo提权、特殊的主机清单变量
  • Qt:QFileDialog
  • 我的QQ编程学习群
  • 【C++】类与对象(四)——初始化列表|explicit关键字|static成员|友元|匿名对象
  • ChatGPT高效提问—prompt常见用法
  • 使用vite创建vue+ts项目,整合常用插件(scss、vue-router、pinia、axios等)和配置
  • 泛型、Trait 和生命周期(上)
  • <网络安全>《18 数据安全交换系统》
  • Kafka 生产调优
  • springboot162基于SpringBoot的体育馆管理系统的设计与实现
  • Interpolator:在Android中方便使用一些常见的CubicBezier贝塞尔曲线动画效果