Evolution of a hand rolled fake - part 3
So how do I fake an interface with properties?
1: interface IAnotherInterface
2: {
3: int SomeProperty { get; }
4: int SomeOtherProperty { get; set; }
5: }
Most of the time I just let my fake have the property implemented. This works most of the time but only really well if the interface properties are truly just data carriers. If there is a chance the properties can throw exceptions or if a property needs to be initialized specifically for each test I might go with the property method approach. Here is an example of both:
6: public class FakeAnotherInterface : IAnotherInterface
7: {
8: public int SomeProperty { get; set; }
9:
10: public Func<int> SomeOtherProperty_Get { get; set; }
11:
12: public Action<int> SomeOtherProperty_Set { get; set; }
13:
14: int IAnotherInterface.SomeOtherProperty
15: {
16: get
17: {
18: Assert.IsNotNull(
19: this.SomeOtherProperty_Get,
20: "Unexpected call getting SomeOtherProperty");
21: return this.SomeOtherProperty_Get();
22: }
23:
24: set
25: {
26: Assert.IsNotNull(
27: this.SomeOtherProperty_Set,
28: "Unexpected call setting SomeOtherProperty {0}", value);
29: this.SomeOtherProperty_Set(value);
30: }
31: }
32: }