如何测试 API 只是 returns 系统值?
How to test API that just returns system values?
比方说我们有一个例程
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 寄存器和类似的东西,然后将其与例程 returns 进行比较。但是对于单元测试来说,这似乎是很多工作。测试理论对这样的测试有何看法?API?
我会说这更多地取决于上下文。
您应该测试您依赖的所有内容或您在 public API 中承诺的所有内容(也隐藏所有未测试的内容)。
如果此方法是您的库的一部分,您应该确保它执行您在文档中所说的一切。那就是将寄存器设置为特定值并验证函数 returns 它们是否正确。
如果这是内部的并且您只依赖于它的一部分,那么只测试该部分并修改文档以说明其他内容未经测试且不应使用(除非正确测试)。假设你只需要这个来获取指令指针,这样你就可以从代码的其他部分跳回来,然后只测试这部分行为。
我不会完全跳过测试。该文档正确地指定了它有一些特定于平台的组件。如果代码需要某些奇怪的体系结构中缺少的特定内容,那么如果有测试失败,那就太好了。它还可以作为一个很好的模板,供使用更多异国情调的架构的用户添加他们自己的测试,使代码整体更健壮。
比方说我们有一个例程
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 寄存器和类似的东西,然后将其与例程 returns 进行比较。但是对于单元测试来说,这似乎是很多工作。测试理论对这样的测试有何看法?API?
我会说这更多地取决于上下文。
您应该测试您依赖的所有内容或您在 public API 中承诺的所有内容(也隐藏所有未测试的内容)。
如果此方法是您的库的一部分,您应该确保它执行您在文档中所说的一切。那就是将寄存器设置为特定值并验证函数 returns 它们是否正确。
如果这是内部的并且您只依赖于它的一部分,那么只测试该部分并修改文档以说明其他内容未经测试且不应使用(除非正确测试)。假设你只需要这个来获取指令指针,这样你就可以从代码的其他部分跳回来,然后只测试这部分行为。
我不会完全跳过测试。该文档正确地指定了它有一些特定于平台的组件。如果代码需要某些奇怪的体系结构中缺少的特定内容,那么如果有测试失败,那就太好了。它还可以作为一个很好的模板,供使用更多异国情调的架构的用户添加他们自己的测试,使代码整体更健壮。