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

  • Hello.
    after running : C:\ncs\v2.6.0\nrf\tests\unity\example_test> west build -b native_posix -t run
    build log:


    ```

    -- west build: generating a build system
    Loading Zephyr default modules (Zephyr base).
    -- Application: C:/ncs/v2.6.0/nrf/tests/unity/example_test
    -- CMake version: 3.21.0
    -- Using NCS Toolchain 2.6.20240304.889616714482 for building. (C:/ncs/toolchains/cf2149caf2/cmake)
    -- Found Python3: C:/ncs/toolchains/cf2149caf2/opt/bin/python.exe (found suitable version "3.9.13", minimum required is "3.8") found components: Interpreter
    -- Cache files will be written to: C:/ncs/v2.6.0/zephyr/.cache
    -- Zephyr version: 3.5.99 (C:/ncs/v2.6.0/zephyr)
    -- Found west (found suitable version "1.2.0", minimum required is "0.14.0")
    -- Board: native_posix
    -- Found host-tools: zephyr 0.16.5 (C:/ncs/toolchains/cf2149caf2/opt/zephyr-sdk)
    -- Found toolchain: host (gcc/ld)
    -- Found Dtc: C:/ncs/toolchains/cf2149caf2/opt/bin/dtc.exe (found suitable version "1.4.7", minimum required is "1.4.6")
    -- Found BOARD.dts: C:/ncs/v2.6.0/zephyr/boards/posix/native_posix/native_posix.dts
    -- Generated zephyr.dts: C:/ncs/v2.6.0/nrf/tests/unity/example_test/build/zephyr/zephyr.dts
    -- Generated devicetree_generated.h: C:/ncs/v2.6.0/nrf/tests/unity/example_test/build/zephyr/include/generated/devicetree_generated.h
    -- Including generated dts.cmake file: C:/ncs/v2.6.0/nrf/tests/unity/example_test/build/zephyr/dts.cmake
    Parsing C:/ncs/v2.6.0/nrf/tests/unity/example_test/Kconfig
    Loaded configuration 'C:/ncs/v2.6.0/zephyr/boards/posix/native_posix/native_posix_defconfig'
    Merged configuration 'C:/ncs/v2.6.0/nrf/tests/unity/example_test/prj.conf'
    Configuration saved to 'C:/ncs/v2.6.0/nrf/tests/unity/example_test/build/zephyr/.config'
    Kconfig header saved to 'C:/ncs/v2.6.0/nrf/tests/unity/example_test/build/zephyr/include/generated/autoconf.h'
    -- Found GnuLd: c:/programdata/chocolatey/lib/mingw/tools/install/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.bfd.exe (found version "2.39")
    -- The C compiler identification is GNU 12.2.0
    -- The CXX compiler identification is GNU 12.2.0
    -- The ASM compiler identification is GNU
    -- Found assembler: C:/ProgramData/chocolatey/bin/gcc.exe
    CMake Error at C:/ncs/v2.6.0/zephyr/arch/posix/CMakeLists.txt:4 (message):
    The POSIX architecture only works on Linux. If on Windows or macOS
    consider using a virtual machine to run a Linux guest.


    -- Configuring incomplete, errors occurred!
    See also "C:/ncs/v2.6.0/nrf/tests/unity/example_test/build/CMakeFiles/CMakeOutput.log".
    ←[91mFATAL ERROR: command exited with status 1: 'C:\ncs\toolchains\cf2149caf2\opt\bin\cmake.EXE' -DWEST_PYTHON=C:/ncs/toolchains/cf2149caf2/opt/bin/python.exe '-BC:\ncs\v2.6.0\nrf\tests\unity\example_test\build' -GNinja -DBOARD=native_posix '-SC:\ncs\v2.6.0\nrf\tests\unity\example_test'
    ←[0m
    PS C:\ncs\v2.6.0\nrf\tests\unity\example_test>

    ```
    So I cant use native_posix in windows?

  • I can execute tests by flashing them to nrf9160dk. I am wondering if im using windows is this my only option? Is there a way to use native_posix, native_sim or qemu cortex_m3 simulation layers in windows. This would speed up the test process alot.

    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?

Related