Skip to content

Cheat Sheet

Quick reference for common operations.

Create Imposter

// C# 14+
var imp = IMyService.Imposter();
var svc = imp.Instance();

// C# 9–13
var imp2 = new IMyServiceImposter();
var svc2 = imp2.Instance();

Mode

var implicitImposter = new IMyServiceImposter(ImposterMode.Implicit);
var explicitImposter = new IMyServiceImposter(ImposterMode.Explicit);

Methods

// Return values
imp.GetNumber().Returns(42);
imp.GetNumber().Returns(() => 42);

// Sequencing
imp.GetNumber().Returns(1).Then().Returns(2).Then().Throws<InvalidOperationException>();

// Arguments
imp.Increment(Arg<int>.Any()).Returns(v => v + 1);
imp.Increment(Arg<int>.Is(x => x > 10)).Returns(100);
imp.Increment(5).Returns(50); // implicit Arg<int>

// Ref/Out/In
imp.GenericAllRefKind<int, string, double, bool, int>(OutArg<int>.Any(), Arg<string>.Any(), Arg<double>.Any(), Arg<bool[]>.Any())
   .Returns((out int o, ref string r, in double d, bool[] a) => { o = 5; return 99; })
   .Callback((out int o, ref string r, in double d, bool[] a) => { o = 5; });

// Async
imp.GetNumberAsync().ReturnsAsync(42);
imp.DoWorkAsync().Returns(Task.CompletedTask);

// Throw
imp.GetNumber().Throws<InvalidOperationException>();

// Verify
svc.Increment(1);
imp.Increment(Arg<int>.Any()).Called(Count.AtLeast(1));

Properties

imp.Age.Getter().Returns(33);
imp.Age.Setter(Arg<int>.Any()).Callback(v => { });
imp.Age.Setter(Arg<int>.Any()).Called(Count.Once());

Indexers

imp[Arg<int>.Is(k => k > 0)].Getter().Returns(10);
imp[Arg<int>.Any()].Setter().Callback((i, v) => { });

Events

EventHandler h = (s, e) => { };
svc.SomethingHappened += h;
imp.SomethingHappened.Subscribed(Arg<EventHandler>.Is(h), Count.Once());
imp.SomethingHappened.Raise(this, EventArgs.Empty);

Base Implementation

imp.DoWork(Arg<int>.Any()).UseBaseImplementation();
imp.Age.Getter().UseBaseImplementation();