【发布时间】:2020-06-05 15:15:32
【问题描述】:
我在 QNX 下有一个项目。我正在尝试对其进行单元测试(gtest),但遇到以下问题:
在我的一个源文件中,我使用 sys/siginfo.h (https://www.qnx.com/developers/docs/6.4.1/neutrino/lib_ref/s/sigevent.html) 中的 sigevent 结构。
在我的单元测试中,我为 sys/siginfo.h 文件创建了一个存根文件,我在其中存根了 sigevent 结构,但它抱怨 redefinition 因为还有一个 sigevent 结构在linux下中 https://sites.uclouvain.be/SystInfo/usr/include/bits/siginfo.h.html.
这两个存根有不同的结构——我不能用一个代替另一个。 我不能使用命名空间,因为 sigevent 结构在我的源文件中使用,而不是在单元测试的存根文件中使用 - 我不允许更改源文件。
如果我能够更改源文件,那么使用命名空间也无法解决此问题,因为 sys/siginfo.h 不是用户定义的标头。我认为一个解决方案是 QNX 的 sys/siginfo.h 的包装器。
但是如何通过单元测试解决这个问题?
错误:
/stubs/sys/siginfo.h:166:8: 错误: 'struct sigevent' 的重新定义 结构 sigevent {
/usr/include/x86_64-linux-gnu/bits/siginfo.h:320:16:错误:以前 'struct sigevent' 的定义 typedef struct sigevent
P.S.:我将此问题标记为“C 编程”,因为它不完全是单元测试。
谢谢, 卡门
【问题讨论】:
-
那么为什么要存根
sigevent结构呢?如果结构在两个系统上的 sysinfo.h 中都可用?那为什么要存根呢? -
您在 Linux 上的测试环境中对 QNX 下项目中的文件(或文件组)进行单元测试,我是否理解正确?
-
一种解决方案可能是在您的项目设置(IDE、makefile 等)中定义保护 Linux'
struct sigevent的定义组合(也许 __have_sigevent_t 就足够了)。 -
是的,@Peter-ReinstateMonica。该项目在 QNX 下运行,我正在 Linux 的测试环境中进行单元测试。我不明白您提出的解决方案:'定义保护 Linux struct sigevent 的定义组合'。请描述一下!
-
@KamilCuk QNX 的 sysinfo.h 仅在我在 QNX 上运行项目时可用,因此在测试环境中不可用。因此我必须存根它。这会导致错误,因为 Linux 有自己的存根版本。
标签: c unit-testing