【发布时间】:2015-02-18 23:53:19
【问题描述】:
我在日常工作中是一名初级软件工程师,使用 C#/WPF/Prism,我一直在尝试在业余时间自学其他语言和库以扩大我的视野。我最近一直在研究 C++,同时通过 Google 的测试和模拟库进行单元测试,并且在从 C# 思维方式转移到 C++ 世界方面做得相对较好。虽然一些概念,如多态性和接口,从 C# 迁移过来是完全有意义的,但其中一些对我来说有点令人费解,比如指针算术。我最近一直在研究较低级别的内存,这是我在 C# 中从未见过的,并且开始为我在业余时间从事的一个 3D 模拟项目编写内存分配器。这让我想到了我的问题。
我有一个看起来像这样的函数:
inline u8 AlignForwardAdjustment(const void* address, u8 alignment)
{
u8 adjustment = alignment - (reinterpret_cast<uptr>(address)& static_cast<uptr>(alignment - 1));
if (adjustment == alignment)
{
return 0; //already aligned
}
return adjustment;
}
这不是我自己写的,因为我发现它是我用来学习如何进行手动内存分配器的指南的一部分。然而,作为更多地理解这个主题的一部分,我试图编写单元测试来证明我的分配器工作,从我能找到的最低级别开始。
这是我用于对齐内存的辅助函数之一,它接受并返回一个 void*。据我了解,这意味着它正在返回一些未格式化或类型未知的内存块的指针,这在这种情况下是有意义的。我的问题是,有没有办法为这种方法编写单元或集成测试?在 C# 中,我通常会尝试测试我可以从类外访问的任何函数,但老实说,我不知道如何编写一个测试,该测试会提交一个 Void*(设置为我期望的值)然后能够确保返回的指针正确对齐。
我可以做任何类型的转换来将 Uint 传递给 void* 并检查另一端的数学吗?或者,我应该把这样的函数写成不可测试的吗?任何帮助将不胜感激,甚至是朝着正确方向轻推。
提前谢谢你!
【问题讨论】:
-
对不起,这个网站的新手,显然没有足够的代表来对您的评论进行投票。不过感谢您的帮助!
标签: c++ unit-testing memory-management googletest void-pointers