嵌入式技术论坛
直播中

五斤麻辣油

8年用户 1240经验值
擅长:电源/新能源
私信 关注
[问答]

求助为RT-Thread的测试代码进行单元测试

因为现在RT-Thread的测试代码还比较少,而且很多人反映RT-Thread例子也不多,所以打算建一套系统测试的代码,一个做为例子提供给大家使用;一个做为测试代码进行单元测试。

大家有什么好的建议吗?

我的初步想法是:
每个例子以单独的文件放置,每个文件中包含用户应用入口函数rt_application_init,这样就能够做到只需要替换每个分支中的application.c而编译通过,然后运行测试代码。

对于一套完整的测试,可以考虑采用宏的方式可以把每份代码的rt_application_init入口给屏蔽掉,并且把所有的测试代码都编译进去,并输出各自的函数到finsh shell中,这样也就可以在finsh shell中进行相应的测试了。因为代码还要兼顾到示例性质,所以得要求代码尽量精简。

一份示例:

#include
#ifdef RT_TESTSUITE
  #include
#else
  #if RT_THREAD_PRIORITY_MAX == 32
    #define THREAD_PRIO    20
  #else
    #define THREAD_PRIO    200
  #endif
  #define TEST_LOOP  1
#endif
/*
* This is an example for static thread
*/
static struct rt_thread thread1;
static char thread1_stack[512];
static void thread1_entry(void* parameter)
{
  int i;
  while (TEST_LOOP)
  {
    for (i = 0; i < 10; i ++)
    {
      rt_kprintf("%d
", i);
      rt_thread_delay(100);
    }
  }
#ifdef RT_TESTSUITE
  test_set_state(TEST_STATE_PASSED);
#endif
}
rt_err_t thread_static_init()
{
  rt_err_t result;
  result = rt_thread_init(&thread1,
    "thread1",
    thread1_entry, RT_NULL,
    &thread1_stack[0], sizeof(thread1_stack),
    THREAD_PRIO, 10);
  if (result == RT_EOK)
  {
    rt_thread_startup(&thread1);
  }
  return result;
}
#ifdef RT_TESTSUITE
int thread_static()
{
  test_set_state(TEST_STATE_RUNNING);
  return test_check_result(thread_static_init());
}
FINSH_FUNCTION_EXPORT(thread_static, a static thread object test);
#else
int rt_application_init()
{
  thread_static_init();
  return 0;
}
#endif

RT_TESTSUITE是定义用于测试的,如果把这个宏去掉,那么这也是一份完整的例子(替换掉各个分支中的appliation.c即可运行起来)。

回帖(2)

建立建利12

2022-4-1 14:17:46
例子会包括,
- 内核中各个模块
- 文件系统相关的调用
- 网络协议栈的配置及测试
- GUI各个控件、特性的测试

不包括和各个硬件平台相关的例程。
举报

bigbangboom

2022-4-1 14:18:03
网络测试可能还需要pc端程序配合完成才行吧
举报

更多回帖

发帖
×
20
完善资料,
赚取积分