mockable 3.0.0

Usefull components to make easier to mock your code
Documentation
use chrono::{DateTime, Utc};
use mockable::{Clock, DefaultClock};

#[derive(Debug, Eq, PartialEq)]
#[allow(dead_code)]
struct User {
    creation: DateTime<Utc>,
    name: String,
}

fn create_user(name: String, clock: &dyn Clock) -> User {
    User {
        creation: clock.utc(),
        name,
    }
}

fn main() {
    let user = create_user("Alice".into(), &DefaultClock);
    println!("{user:?}");
}

#[cfg(test)]
mod test {
    use mockable::MockClock;

    use super::*;

    #[test]
    fn test() {
        let creation = Utc::now();
        let mut clock = MockClock::new();
        clock.expect_utc().return_const(creation);
        let expected_user = User {
            creation,
            name: "Alice".into(),
        };
        let user = create_user(expected_user.name.clone(), &clock);
        assert_eq!(user, expected_user);
    }
}