mirror of https://github.com/ARMmbed/mbed-os.git
Add a readme to unit tests
parent
8557529ae3
commit
3fa779692c
|
@ -0,0 +1,65 @@
|
||||||
|
## Stubs, mocks and fakes in Mbed OS
|
||||||
|
|
||||||
|
To make unit testing easier, Mbed OS provides some ready-made CMake libraries you can add in your `target_link_libraries`.
|
||||||
|
Libraries can be object files that contain stubs, mocks and fakes but also sets of include paths - this way you can gain access to normal headers from Mbed OS.
|
||||||
|
|
||||||
|
All the libraries available are in the `CMakeLists.txt` files in `mbed-os/UNITTESTS/stubs` and `mbed-os/UNITTESTS/fakes`.
|
||||||
|
|
||||||
|
The most common ones you might need are `mbed-os-fakes-ble` and `mbed-os-fakes-event-queue`.
|
||||||
|
|
||||||
|
### Fakes
|
||||||
|
|
||||||
|
While stubs are self explanatory and don't offer anything beyond empty implementations, fakes allow for more complex unittests that can simulate whole subsystems.
|
||||||
|
|
||||||
|
#### mbed-os-fakes-ble
|
||||||
|
|
||||||
|
This library provides a fake BLE implementation that uses mocks instead of real BLE components for `Gap`, `GattServer`, `GattClient`, `SecurityManager`.
|
||||||
|
|
||||||
|
There is no need to initialise a fake BLE instance; it is ready to go and can be used just like a normal BLE instance:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
BLE *ble = &BLE::Instance();
|
||||||
|
```
|
||||||
|
|
||||||
|
This call also initialises mocks.
|
||||||
|
Do no cache the BLE instance pointer, or pointer to `GAP`, `GattServer` etc. between tests.
|
||||||
|
You must get the instance fresh at the start of the test.
|
||||||
|
|
||||||
|
You can retrieve all the BLE APIs from the instance just like with a normal one:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
Gap &gap = ble->gap();
|
||||||
|
GattClient &client = ble->gattClient();
|
||||||
|
GattServer &server = ble->gattServer();
|
||||||
|
SecurityManager &sm = ble->securityManager();
|
||||||
|
```
|
||||||
|
|
||||||
|
Whenever an API call is made, the implementation will be called.
|
||||||
|
These are replaced in the fake BLE with google mocks.
|
||||||
|
This means you can set expectations on them.
|
||||||
|
|
||||||
|
```c++
|
||||||
|
EXPECT_CALL(ble::gap_mock(), reset());
|
||||||
|
```
|
||||||
|
|
||||||
|
This will set up an expectation that at some point during the test the `Gap::reset` method will be called.
|
||||||
|
|
||||||
|
The way GoogleTest works means that if you set expectations on your mocks they must be destroyed at the end of each test.
|
||||||
|
This is done through the fake BLE instance special method:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
ble::delete_mocks();
|
||||||
|
```
|
||||||
|
|
||||||
|
#### mbed-os-fakes-event-queue
|
||||||
|
|
||||||
|
This is a fake event queue that doesn't bring in any dependencies from mbed-os.
|
||||||
|
Its API is simplified and it only offers limited functionality.
|
||||||
|
|
||||||
|
If you choose to use it you must not also include a library that brings in real headers for the event queue as they would conflict.
|
||||||
|
|
||||||
|
The API calls supported are for simple calls `call`, `call_in` and the `cancel` method.
|
||||||
|
|
||||||
|
The event queue is not run in real time and must be progressed manually.
|
||||||
|
You may use `dispatch(int milliseconds)` and `dispatch_forever()` to process events in the queue.
|
||||||
|
This way you can simulate the passage of time in your test.
|
Loading…
Reference in New Issue