pub struct MockSpawner { /* private fields */ }Expand description
A mocked version of embassy_executor::Spawner that can be used in its place for unit tests.
This mocked version counts how many times Self::spawn() is called and can be checked that
Self::spawn() was called the correct number of times using Self::done(). If
Self::done() is not called then it asserts that Self::spawn() was called the correct
number of times when dropped which causes a panic if incorrect.
§Panics
Panics if Self::spawn() called the wrong number of times and Self is dropped before
calling Self::done().
§Examples
use embassy_mock::executor::{MockSpawner, MockSpawnerError, Spawner};
#[embassy_executor::task]
async fn example_task() {}
let spawner = MockSpawner::expect(4);
spawner.spawn(example_task()).unwrap();
let res = spawner.done();
let expected = Err(MockSpawnerError::WrongNumberOfTasks {
expected: 4,
actual: 1,
});
assert_eq!(res, expected);use embassy_mock::executor::{MockSpawner, Spawner};
#[embassy_executor::task]
async fn example_task() {}
let spawner = MockSpawner::expect(1); // Expects `spawn()` to be called once.
spawner.spawn(example_task()).unwrap(); // `spawn()` is called once.
// `spawner` is dropped but doesn't panic.use embassy_mock::executor::{MockSpawner, Spawner};
#[embassy_executor::task]
async fn example_task() {}
let spawner = MockSpawner::expect(2); // Expects `spawn()` to be called twice.
spawner.spawn(example_task()).unwrap(); // `spawn()` is called only once.
// `spawner` is dropped and will panic.Implementations§
Source§impl MockSpawner
impl MockSpawner
Sourcepub const fn expect(expected: usize) -> Self
pub const fn expect(expected: usize) -> Self
Create a MockSpawner, providing the expected number of calls to Self::spawn().
§Examples
use embassy_mock::executor::MockSpawner;
let spawner = MockSpawner::expect(X); // Where `X` is the number of times `spawn()` should be calledSourcepub fn done(self) -> Result<(), MockSpawnerError>
pub fn done(self) -> Result<(), MockSpawnerError>
Mark the MockSpawner as done and check if Self::spawn() was called the correct
number of times.
This is a cleaner way of testing that Self::spawn() is called the correct number of
times as MockSpawner doesn’t cause a panic when dropped if this method is called,
it also returns a Result<(), MockSpawnerError> which allows checking the outcome of the
mock.
§Examples
use embassy_mock::executor::{MockSpawner, Spawner};
#[embassy_executor::task]
async fn example_task() {}
let spawner = MockSpawner::expect(1);
spawner.spawn(example_task()).unwrap();
let res = spawner.done();
assert_eq!(res, Ok(()));use embassy_mock::executor::{MockSpawner, MockSpawnerError, Spawner};
#[embassy_executor::task]
async fn example_task() {}
let spawner = MockSpawner::expect(4);
spawner.spawn(example_task()).unwrap();
let res = spawner.done();
let expected = Err(MockSpawnerError::WrongNumberOfTasks {
expected: 4,
actual: 1,
});
assert_eq!(res, expected);
// This doesn't panic when `spawner` is dropped as `spawner.done()` was called.Trait Implementations§
Source§impl Debug for MockSpawner
impl Debug for MockSpawner
Source§impl Drop for MockSpawner
impl Drop for MockSpawner
Source§fn drop(&mut self)
fn drop(&mut self)
If Self::done() has not been called before being dropped then check that the number of
times Self::spawn() was called is as expected.
Source§impl Spawner for MockSpawner
impl Spawner for MockSpawner
Source§fn spawn<S>(&self, token: SpawnToken<S>) -> Result<(), SpawnError>
fn spawn<S>(&self, token: SpawnToken<S>) -> Result<(), SpawnError>
Increment an internal counter of how many times this method is called.