Create a MockMessenger struct that implements the Messenger trait and wraps a Vec<String> in std::cell::RefCell to allow mutation through an immutable reference.
use std::cell::RefCell;
struct MockMessenger {
sent_messages: RefCell<Vec<String>>,
}
impl MockMessenger {
fn new() -> MockMessenger {
MockMessenger {
sent_messages: RefCell::new(vec![]),
}
}
}
impl Messenger for MockMessenger {
fn send(&self, message: &str) {
self.sent_messages.borrow_mut().push(String::from(message));
}
}
In your test, instantiate MockMessenger::new(), pass it to LimitTracker::new, and assert against mock_messenger.sent_messages.borrow().