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
IChocolateDispenser sut = Mock.Create<IChocolateDispenser>();
sut.SetupMock.Method.Dispense(It.Is("Dark"), It.Is(2)).Returns(true);
sut.SetupMock.Indexer(It.Is("Dark")).Returns(10);
Moq
Mock<IChocolateDispenser> mock = new Moq.Mock<IChocolateDispenser>();
mock.Setup(x => x.Dispense("Dark", 2)).Returns(true);
mock.SetupProperty(x => x["Dark"], 10);
NSubstitute
IChocolateDispenser substitute = Substitute.For<IChocolateDispenser>();
substitute.Dispense("Dark", 2).Returns(true);
substitute["Dark"].Returns(10);
FakeItEasy
IChocolateDispenser fake = A.Fake<IChocolateDispenser>();
A.CallTo(() => fake.Dispense("Dark", 2)).Returns(true);
A.CallTo(() => fake["Dark"]).Returns(10);
Usage
Mockolate
int available = sut["Dark"];
bool success = sut.Dispense("Dark", 2);
sut.RaiseOnMock.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.It.Is("Dark", 2);
Verification
Mockolate
sut.VerifyMock.Invoked.Dispense(It.Is("Dark"), It.Is(2)).Once();
sut.VerifyMock.GotIndexer(It.Is("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();