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
use ;
/// Generates a "dummy" implementation for each method in a trait using `unimplemented!()`. The main
/// use case is to greate specialized test doubles for implementing the trait without worrying the
/// need to explicitly implement methods, which are not invoked by the test.
///
/// * Existing default implementations are respected and not overridden.
/// * `async` methods are supported
/// * Methods returning `impl` Traits are not supported, with the exception of `impl Future` and
/// `impl Iterator`. One way to deal with this, is to give them an explicit default implementation
/// in the test case. E.g.,
///
/// ```
/// # trait Answer {}
/// # struct DummyAnswer;
/// # impl Answer for DummyAnswer {}
///
/// #[cfg_attr(test, double_trait::dummies)]
/// trait MyTrait {
/// #[cfg(not(test))]
/// fn answer(&self) -> impl Answer;
///
/// // `dummies` can not interfere a type for `impl Answer`, so we provide a default impl here.
/// #[cfg(test)]
/// fn answer(&self) -> impl Answer {
/// DummyAnswer
/// }
///
/// // ... other methods ...
/// }
/// ```
/// * Dummy implements the trait