首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ceedling/Unity/Cmock测试嵌入式系统

如何使用Ceedling/Unity/Cmock测试嵌入式系统
EN

Stack Overflow用户
提问于 2020-02-11 00:17:34
回答 2查看 2.5K关注 0票数 1

我是新的测试嵌入式系统与放弃。我想知道是否有一个好的地方开始学习如何使用割让。

我正在为一个CubeSat项目开发一个嵌入式系统,我们需要一种方法来测试我们的代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-05 16:25:50

首先,您应该理解的是,首先也是最重要的是,Ceedling或任何单元测试框架都是为了测试您的代码,并扩展到您的最终项目。您通常使用某种基于标准的编译器在PC上测试代码,而不一定是嵌入式系统的交叉编译器。您可以在目标上运行割让生成的测试,但您可能不想这样做。

关于这个主题的最好的书(并不完美,但仍然很好)是James .Grenning‘(实用程序员)。

我有一个关于在旧窗户在这里下设置的个人GIST。主要是关于让Ruby和GCC上窗户的事。

在Linux下,Ceedling非常容易安装和运行。

  1. 确认你有gcc在
  2. 确认你有宝石红宝石
  3. gem安装吊顶
  4. 割裂

就这样。如果您正在适应一个新的项目,您将需要摆弄project.yml文件,以告诉放弃您的源文件和包含文件,以及您希望您的测试文件去向。对于某些项目结构来说,这可能是一种挑战,但如果所有这些都失败了,您只需将任何文件夹按名称放入您的project.yml文件中(这不是最好的,而是疯狂的混乱项目的最终退路),还有其他一些学习曲线的东西,比如割让test_xxx.c文件,它们包含您的测试,但也像链接器控制文件。假定test_xxx.c文件中的每个包含文件都有一个具有相同基名的相应的翻译单元(.c文件)。Ceedling将搜索出它并将其编译到您的测试中。如果您想要排除该代码,但需要一些依赖项,则需要更改包含文件名以包含单词模仿接口,以便foo.h成为mock_foo.h,并为头中所有声明的函数创建模拟函数。如果没有header/tranalation_unit名称对,则可以通过将文件名放入名为TEST_FILE的宏中来告诉ceedling编译和链接文件。因此,如果您没有foo.h但是需要foo.c:

代码语言:javascript
复制
TEST_FILE("foo.c")

扔开关页面上还有很多其他很好的资源。希望这能有所帮助。我从来不需要直接从github中提取这个工具,但是如果您想给他们发送补丁,我想这是另一种方式,但是他们花费了太多的精力使其摩擦--减少设置和使用,我将首先从ruby方法开始。

另外请注意,现在module_generator插件中有一些很酷的单元测试钩子,可以自动生成用于测试的存根,这在目标测试中可能非常有用。

票数 1
EN

Stack Overflow用户

发布于 2020-02-13 22:10:46

有很多种方法可以进入它。我的首选是克隆割让(git clone https://github.com/ThrowTheSwitch/Ceedling.git && git submodule update --init --recursive)并运行一个示例来查看它是如何工作的。

要使示例/temp_传感器工作,您需要进行三个修改:

  • project.yml -插件,load_paths应该是../../plugins
  • rakefile.rb - PROJECT_CEEDLING_ROOT应该是"../.."
  • lib/ceedling/rakefile.rb -添加引用diy/test的行

下面是我对主服务器(git commit 09a04cb55a86)所做的修改的区别:

代码语言:javascript
复制
diff --git a/examples/temp_sensor/project.yml b/examples/temp_sensor/project.yml
index ec9a45e..a327f5b 100644
--- a/examples/temp_sensor/project.yml
+++ b/examples/temp_sensor/project.yml
@@ -58,7 +58,7 @@

 :plugins:
   :load_paths:
-    - vendor/ceedling/plugins
+    - ../../plugins
   :enabled:
     - stdout_pretty_tests_report
     - module_generator
diff --git a/examples/temp_sensor/rakefile.rb b/examples/temp_sensor/rakefile.rb
index 1b534d2..82d2e64 100755
--- a/examples/temp_sensor/rakefile.rb
+++ b/examples/temp_sensor/rakefile.rb
@@ -1,4 +1,4 @@
-PROJECT_CEEDLING_ROOT = "vendor/ceedling"
+PROJECT_CEEDLING_ROOT = "../.."
 load "#{PROJECT_CEEDLING_ROOT}/lib/ceedling.rb"

 Ceedling.load_project
diff --git a/lib/ceedling/rakefile.rb b/lib/ceedling/rakefile.rb
index 37001ba..be6b620 100644
--- a/lib/ceedling/rakefile.rb
+++ b/lib/ceedling/rakefile.rb
@@ -9,6 +9,7 @@ CEEDLING_RELEASE = File.join(CEEDLING_ROOT, 'release')
 $LOAD_PATH.unshift( CEEDLING_LIB )
 $LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'unity/auto') )
 $LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'diy/lib') )
+$LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'diy/test') )
 $LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'cmock/lib') )
 $LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'deep_merge/lib') )

通过在rake test中运行examples/temp_sensor来运行该示例。

您需要为temp_sensor示例安装ruby (用于rake)和gcc。

一旦确定了example/temp_sensor/rakefile.rbexample/temp_sensor/project.yml文件的格式,关键工作就在examples/temp_sensor/test/Test...文件中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60160332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档