I was reviewing some unit tests from a colleague, and I saw something in the lines of:
var dogMock = new Mock<Dog>();
dogMock.Setup(d => d.Bark(It.IsAny<Volume>())).Returns(someMockedBarking);
dogMock.Object.Age = 2;
Is it ok that a property of the Object
is directly set, or is it better to use the Setup
and Returns
like the following?
dogMock.Setup(d => d.Age).Returns(2);
In both cases, the unit tests succeeds though.
>Solution :
It depends on your needs. Note that the first one requires SetupProperty
or SetupAllProperties
to work correctly (docs):
var mock = new Mock<IFoo>();
// mock.SetupProperty(f => f.Name);
// mock.SetupAllProperties();
IFoo foo = mock.Object;
foo.Name = "bar";
Assert.AreEqual("bar", foo.Name); // Throws if both commented out
public interface IFoo
{
string Name { get; set; }
}