use std::sync::Arc;
pub struct MockBuilder<M: Default> {
phantom: std::marker::PhantomData<M>,
}
impl<M: Default> MockBuilder<M> {
pub fn configure(mock_config: impl FnOnce(&mut M)) -> Arc<M> {
let mut mock = M::default();
mock_config(&mut mock);
Arc::new(mock)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[mockall::automock]
trait TestTrait {
fn test_method(&self) -> String;
}
#[test]
fn using_mock_builder() {
let mock = MockBuilder::configure(|mock: &mut MockTestTrait| {
mock.expect_test_method()
.returning(|| "test explicit type".to_string());
});
assert_eq!("test explicit type".to_string(), mock.test_method());
let mock = MockBuilder::<MockTestTrait>::configure(|mock| {
mock.expect_test_method().returning(|| "test turbofish".to_string());
});
assert_eq!("test turbofish".to_string(), mock.test_method());
}
}