1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//! Double is a fully-featured mocking library for mocking `trait`
//! implementations.
//!
//! The `Mock` struct tracks function call arguments and specifies return
//! values or function overrides.
//!
//! # Examples
//!
//! ```
//! #[macro_use]
//! extern crate double;
//!
//! // Code under test
//! trait BalanceSheet {
//! fn profit(&self, revenue: u32, costs: u32) -> i32;
//! }
//!
//! fn double_profit(revenue: u32, costs: u32, balance_sheet: &BalanceSheet) -> i32 {
//! balance_sheet.profit(revenue, costs) * 2
//! }
//!
//! // Test which uses a mock BalanceSheet
//! 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() {
//! // GIVEN:
//! let sheet = MockBalanceSheet::default();
//! sheet.profit.return_value(250);
//! // WHEN:
//! let profit = double_profit(500, 250, &sheet);
//! // THEN:
//! // mock return 250, which was double
//! assert_eq!(500, profit);
//! // assert that the revenue and costs were correctly passed to the mock
//! sheet.profit.has_calls_exactly_in_order(vec!((500, 250)));
//! }
//!
//! // Executing test
//! fn main() {
//! test_doubling_a_sheets_profit();
//! }
//! ```
pub use crateMock;