Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为交叉编译的代码构造单元测试?_C++_Unit Testing - Fatal编程技术网

C++ 如何为交叉编译的代码构造单元测试?

C++ 如何为交叉编译的代码构造单元测试?,c++,unit-testing,C++,Unit Testing,我的新项目的目标是嵌入式ARM处理器。我有一个构建系统,它使用运行在Ubuntu linux机器上的交叉编译器。我喜欢尽可能多地使用单元测试,但对于如何继续进行此设置,我有点困惑 我不知道如何在ARM设备本身上运行单元测试,如果我错了,请纠正我。我认为我最好的选择是在构建机器上使用自己的本机编译器编译代码进行单元测试。这种方法是否存在根本缺陷?在不同平台上进行单元测试是浪费时间吗 我计划在构建机器上使用CppUnit,使用本机编译器进行单元测试。然后,我将交叉编译ARM处理器的代码,并在目标设备

我的新项目的目标是嵌入式ARM处理器。我有一个构建系统,它使用运行在Ubuntu linux机器上的交叉编译器。我喜欢尽可能多地使用单元测试,但对于如何继续进行此设置,我有点困惑

我不知道如何在ARM设备本身上运行单元测试,如果我错了,请纠正我。我认为我最好的选择是在构建机器上使用自己的本机编译器编译代码进行单元测试。这种方法是否存在根本缺陷?在不同平台上进行单元测试是浪费时间吗


我计划在构建机器上使用CppUnit,使用本机编译器进行单元测试。然后,我将交叉编译ARM处理器的代码,并在目标设备本身上进行集成和系统测试。您如何组织源代码和测试代码,以防止它变成一团混乱?

对于嵌入式设备,这取决于您拥有的硬件接口

例如,我处理的运动控制卡使用命令行界面。他们发布的IDE使用它作为与卡交互的主要方法。无论我使用的是PCI、IDE、串行还是以太网,其工作方式都是相同的

他们为编程提供的DLL允许访问命令行界面。所以我可以发送一个字符串,然后读回响应。因此,我为我的单元测试所做的就是在我的开发机器中挂上一张物理卡。我在上传软件后发送命令,读取响应,如果它们正确,则通过测试

我还有额外的硬件,一个黑匣子,如果你愿意的话,它模拟了一台机器,运动控制卡通常也连接在一起。它有助于自动设置,但有一个手动阶段,因为我必须设置开关来模拟机器上的不同设置

通过使用数字I/O卡,并使用其输出输入到运动控制卡的输入中,以及反过来输入,我实现了更高程度的自动化

我发现,对于大多数硬件,你必须有某种类型的模拟器硬件

例外是软件模拟器附带的罕见软件包

我知道这可能并不理想,因为不是每个开发人员都能在他们的办公桌上放一个这样的东西。我的硬件模拟器,所以我可以给它的任何人在运动控制软件的工作时间。如果它不能便携,那么有一台专用的测试或硬件开发计算机是合适的


最后,它总结了硬件的细节以及制造商在软件和模拟器方面提供的支持。为了给你更多的帮助,你需要发布更多的细节。

在嵌入式行业十多年的时间里,我看到了很多方法。在我目前的公司:

我们的一款产品有足够的马力和空间在目标板上运行测试。它有点慢,我们不能把所有的python都放在我们想要的盒子上,但是它工作得很好。 我们的一款产品没有足够的空间,所以我们可以在x86中编译所有lib,任何不依赖硬件的东西,并在台式机上运行单元测试。这并不完美,但总比没有好得多。 我们的一个组件是一个超轻量的异国硬件上的电源吝啬鬼,所以几乎没有单元测试是可能的。核心算法DES等在x86上进行了测试,如上所述,但大部分代码必须作为一个整体进行现场测试。这需要大量的代码审查。
我要做的所有硬件通信都是通过串口进行的,所以我可以直接在构建机器上进行。不幸的是,我没有ARM设备的仿真器。如果我有发送和接收命令的能力,串行是很好的。例如,独立于Arm上运行的软件/固件设置输出和读取输入。还可以读取内存位置和寄存器。如果您有,您应该能够装配一些硬件来进行手动测试。如果您能够装配硬件,那么您可以编写一个向导,告诉测试人员为每个测试设置什么。这并不理想,但当你处理硬件时,它有时是你唯一能做的事情。还要确保在运行Linux时没有ARM模拟器。