Running and creating unit test for nordic application

Hello. 

I am trying to learn how to implement unit tests for embedded c-application. I created simple example about my problem and I am having hard time actually running the tests using native sim or nrf9160dk as target. I am following these instructions from nordic: https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/test_and_optimize/testing_unity_cmock.html 

I have installed these tools: Cmock,Unity & Ruby.

Everytime I try to run this command 'west build -b native_posix -t run', I get this output: 

```

PS C:\Users\OMISTAJA\Projekt\Testeri\Unit\src\test> west build -b native_posix -t run
usage: west [-h] [-z ZEPHYR_BASE] [-v] [-V] <command> ...
west: error: argument <command>: invalid choice: 'build' (choose from 'init', 'update', 'list', 'manifest', 'diff', 'status', 'forall', 'help', 'config', 'topdir', 'selfupdate')

```

I am using nrf connect from vscode.

0160.Unit.zip

Parents
  • Hello,

    Where are you running this command from? That is an error that appears when your environmental variables are set incorrectly.

    If your SDK version is set corrently in VS Code, then please try to open a new terminal of type "nRF Connect" and it should set up the environmental variables accordingly.

    You can also modify your ZEPHYR_BASE environmental variable manually to point to the path of the "zephyr" folder in NCS.

    Best regards,

    Michal

  • Hello,
    Thanks for the reply. I was originally  running the command from powershell.
    Now I switched to nrf Connect and got this error: 

    ´´´

    PS C:\Users\OMISTAJA\Projekt\Testeri\Unit\src\test> west build -b native_posix -t run
    -- west build: running target run
    ninja: error: loading 'build.ninja': No such file or directory .

    FATAL ERROR: command exited with status 1: 'C:\ncs\toolchains\v2.3.0\opt\bin\cmake.EXE' --build 'C:\Users\OMISTAJA\Projekt\Testeri\Unit\src\test\build' --target run

    ´´´

    This looks like Cmake error. I am complete beginner when it comes to cmake, any suggestions what my cmakelist.txt file is missing?

    My SDK version is 2.3

    0640.Unit.zip

    I made slight changes:
    added Cmakelistst.txt to test directory
    created src folder and moved unity and tests module files there.

    Thanks in advance.

  • Interesting, it was new to my also, I do run ubuntu on my computer so that might be why I did not see it. In a previous company we used ceedling( test suite from the makers of Cmock and Unity). We used WSL as a build environment for our testing and it worked like a charm. If you install windows subsystem for linux you can setup VScode to use it as a remote window. The downside to this is that you will need to install our SDK for WSL also. 

    Regards

    Runar

  • Good that you were able to run the test. Please see my other response regarding using WSL. In general you don't want to run unit tests on target for multiple reasons 

    Just some examples

    1. It takes time to flash the device

    2. The code is suddenly no longer hardware independent

    3. Can't be integrated into a CI pipeline

    Regards

    Runar

  • Thank you for great response.
    I have wsl installed, I try to make this work with wsl.
    This comment really helped a lot.  
    Final question: does nordic have tutorial/guide how to set up sdk with wsl?

  • I think it should be as simple as:

    1. install wsl,

    2. install ubuntu, I recommend 22.04 LTS.

    3 open VScode and select remote windows 

    4. Install the NCS extensions (they need to be reinstalled for the remote window) 

    5. Start developing 

    Regards

    Runar

  • Thank you 
    for other beginners:
    I needed to install cmake and ruby in wsl also.
    aftter running  unity/example_test in wsl I encountered this build error:

    /home/anicare/ncs/v2.6.0/zephyr/arch/posix/core/offsets/offsets.c
    In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/stdint.h:9,
    from /home/anicare/ncs/v2.6.0/zephyr/include/zephyr/types.h:11,
    from /home/anicare/ncs/v2.6.0/zephyr/include/zephyr/kernel_includes.h:21,
    from /home/anicare/ncs/v2.6.0/zephyr/include/zephyr/kernel.h:17,
    from /home/anicare/ncs/v2.6.0/zephyr/arch/posix/core/offsets/offsets.c:26:
    /usr/include/stdint.h:26:10: fatal error: bits/libc-header-start.h: No such file or directory
    26 | #include <bits/libc-header-start.h>
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~
    compilation terminated.
    [9/95] Generating include/generated/version.h
    -- Zephyr version: 3.5.99 (/home/anicare/ncs/v2.6.0/zephyr), build: d96769faceca
    ninja: build stopped: subcommand failed.
    FATAL ERROR: command exited with status 1: /home/anicare/ncs/toolchains/2be090971e/usr/local/bin/cmake --build /home/anicare/ncs/v2.6.0/nrf/tests/unity/example_test/build --target run

    I tried to add #include <bits/libc-header-start.h> in offsets.c file but that  didnt fix the issue.

    You already helped me alot and pointed me in right direction. I alrdy got answer to my original ticket and this thread is getting quite long. I can try to solve this on my own.


    Thank you  Runar.

Reply
  • Thank you 
    for other beginners:
    I needed to install cmake and ruby in wsl also.
    aftter running  unity/example_test in wsl I encountered this build error:

    /home/anicare/ncs/v2.6.0/zephyr/arch/posix/core/offsets/offsets.c
    In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/stdint.h:9,
    from /home/anicare/ncs/v2.6.0/zephyr/include/zephyr/types.h:11,
    from /home/anicare/ncs/v2.6.0/zephyr/include/zephyr/kernel_includes.h:21,
    from /home/anicare/ncs/v2.6.0/zephyr/include/zephyr/kernel.h:17,
    from /home/anicare/ncs/v2.6.0/zephyr/arch/posix/core/offsets/offsets.c:26:
    /usr/include/stdint.h:26:10: fatal error: bits/libc-header-start.h: No such file or directory
    26 | #include <bits/libc-header-start.h>
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~
    compilation terminated.
    [9/95] Generating include/generated/version.h
    -- Zephyr version: 3.5.99 (/home/anicare/ncs/v2.6.0/zephyr), build: d96769faceca
    ninja: build stopped: subcommand failed.
    FATAL ERROR: command exited with status 1: /home/anicare/ncs/toolchains/2be090971e/usr/local/bin/cmake --build /home/anicare/ncs/v2.6.0/nrf/tests/unity/example_test/build --target run

    I tried to add #include <bits/libc-header-start.h> in offsets.c file but that  didnt fix the issue.

    You already helped me alot and pointed me in right direction. I alrdy got answer to my original ticket and this thread is getting quite long. I can try to solve this on my own.


    Thank you  Runar.

Children
Related