C++ 如何测试只返回系统值的API?

C++ 如何测试只返回系统值的API?,c++,unit-testing,testing,libunwind,C++,Unit Testing,Testing,Libunwind,比如说,我们有一个惯例 int unw_getcontext(unw_context_t *ucp) The unw_getcontext() routine initializes the context structure pointed to by ucp with the machine-state of the call-site. The exact set of registers stored by unw_getcontext() is platform-specific

比如说,我们有一个惯例

int unw_getcontext(unw_context_t *ucp)

The unw_getcontext() routine initializes the context structure pointed to by ucp with the machine-state of the call-site. The exact set of registers stored by unw_getcontext() is platform-specific

对于这样的例行程序,单元测试必须是什么?当然,我可以使用一些系统调用来获取CPU寄存器和类似的东西,然后将其与例程返回的内容进行比较。但是对于一个单元测试来说,似乎有很多工作要做。关于测试这样的API,测试理论是怎么说的呢?

我想说它更多地取决于上下文

您应该测试您在公共API中所依赖或承诺的所有内容(还应该隐藏未测试的所有内容)

如果这个方法是你的库的一部分,你应该确保它完成了你在文档中所说的一切。即将寄存器设置为特定值,并验证函数是否正确返回它们

如果这是内部的,并且您只依赖其中的一部分,那么只测试该部分就可以了,并修改文档,说明其他内容未测试,不应使用(除非测试正确)。假设您只需要它来获取指令指针,这样您就可以从代码的其他部分跳回,然后只测试这部分行为

我不会完全跳过考试。文档正确地指定了它有一些特定于平台的组件。如果代码需要某些奇怪的体系结构上缺少的特定内容,那么如果有一个测试失败就好了。它还可以作为一个很好的模板,供更具异国情调的体系结构的用户添加他们自己的测试,从而使代码总体上更加健壮