Skip to main content

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();