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 = IChocolateDispenser.CreateMock();
sut.Mock.Setup.Dispense(It.Is("Dark"), It.Is(2)).Returns(true);
sut.Mock.Setup[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.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.It.Is("Dark", 2);

Verification

Mockolate

sut.Mock.Verify.Dispense(It.Is("Dark"), It.Is(2)).Once();
sut.Mock.Verify[It.Is("Dark")].Got().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();