#[macro_use]
extern crate double;
trait BalanceSheet {
fn profit(&self, revenue: u32, costs: u32) -> i32;
}
fn double_profit(revenue: u32, costs: u32, balance_sheet: &dyn BalanceSheet) -> i32 {
balance_sheet.profit(revenue, costs) * 2
}
mock_trait!(
MockBalanceSheet,
profit(u32, u32) -> i32);
impl BalanceSheet for MockBalanceSheet {
mock_method!(profit(&self, revenue: u32, costs: u32) -> i32);
}
fn test_doubling_a_sheets_profit() {
let sheet = MockBalanceSheet::default();
sheet.profit.return_value(250);
let profit = double_profit(500, 250, &sheet);
assert_eq!(500, profit);
sheet.profit.has_calls_exactly_in_order(vec!((500, 250)));
}
pub trait UserStore {
fn get_username(&self, id: i32) -> Result<String, String>;
}
mock_trait_no_default!(
MockUserStore,
get_username(i32) -> Result<String, String>);
impl UserStore for MockUserStore {
mock_method!(get_username(&self, id: i32) -> Result<String, String>);
}
fn test_manually_setting_default_retval() {
let mock = MockUserStore::new(
Ok("default_user_name".to_owned()));
let result = mock.get_username(10001);
assert_eq!(Ok("default_username".to_owned()), result);
}
fn main() {
test_doubling_a_sheets_profit();
test_manually_setting_default_retval();
}