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

问题描述 投票:0回答:1

比方说,我们有例行公事

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有何看法?

c++ unit-testing testing libunwind
1个回答
1
投票

我会说这取决于上下文。

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

如果此方法是库的一部分,则应确保它执行文档中所述的所有操作。这是将寄存器设置为特定值并验证函数是否正确返回它们。

如果这是内部的,你只依赖它的一部分,那么只测试那个部分并修改文档,说其他的东西没有经过测试,不应该被使用(除非经过适当的测试)。假设您只需要这个来获取指令指针,这样您就可以从代码的其他部分跳回来,然后只测试这部分行为。

我不会完全跳过测试。文档正确地指定了一些特定于平台的组件。如果代码需要在某些奇怪的架构上缺少特定的东西,那么如果测试失败将会很好。它还可以作为一个很好的模板,为更奇特的架构的用户添加自己的测试,使代码整体更健壮。

© www.soinside.com 2019 - 2024. All rights reserved.