Comparison
This page compares Mockolate with other .NET mocking libraries: Moq, NSubstitute, and FakeItEasy with the example interface:
public delegate void ChocolateDispensedDelegate(string type, int amount);
public interface IChocolateDispenser
{
int this[string type] { get; set; }
int TotalDispensed { get; set; }
bool Dispense(string type, int amount);
event ChocolateDispensedDelegate ChocolateDispensed;
}
Setup
Mockolate
var mock = Mock.Create<IChocolateDispenser>();
mock.Setup.Method.Dispense("Dark", 2).Returns(true);
mock.Setup.Indexer("Dark").Returns(10);
Moq
var mock = new Moq.Mock<IChocolateDispenser>();
mock.Setup(x => x.Dispense("Dark", 2)).Returns(true);
mock.SetupProperty(x => x["Dark"], 10);
NSubstitute
var substitute = Substitute.For<IChocolateDispenser>();
substitute.Dispense("Dark", 2).Returns(true);
substitute["Dark"].Returns(10);
FakeItEasy
var fake = A.Fake<IChocolateDispenser>();
A.CallTo(() => fake.Dispense("Dark", 2)).Returns(true);
A.CallTo(() => fake["Dark"]).Returns(10);
Usage
Mockolate
int available = mock.Subject["Dark"];
bool success = mock.Subject.Dispense("Dark", 2);
mock.Raise.ChocolateDispensed("Dark", 2);
Moq
int available = mock.Object["Dark"];
bool success = mock.Object.Dispense("Dark", 2);
mock.Raise(m => m.ChocolateDispensed += null, "Dark", 2);
NSubstitute
int available = substitute["Dark"];
bool success = substitute.Dispense("Dark", 2);
substitute.ChocolateDispensed += Raise.Event<ChocolateDispensedDelegate>("Dark", 2);
FakeItEasy
int available = fake["Dark"];
bool success = fake.Dispense("Dark", 2);
fake.ChocolateDispensed += Raise.FreeForm.With("Dark", 2);
Verification
Mockolate
mock.Verify.Invoked.Dispense("Dark", 2).Once();
mock.Verify.GotIndexer("Dark").Once();
Moq
mock.Verify(x => x.Dispense("Dark", 2), Times.Once());
mock.VerifyGet(x => x["Dark"], Times.Once());
NSubstitute
substitute.Received(1).Dispense("Dark", 2);
_ = substitute.Received(1)["Dark"];
FakeItEasy
A.CallTo(() => fake.Dispense("Dark", 2)).MustHaveHappenedOnceExactly();
A.CallTo(() => fake["Dark"]).MustHaveHappenedOnceExactly();