Sunday, March 24, 2019

Moq Sample:

Class to be unit tested:

public class A
{
    B _objectB;
    C _objectC;

    public A(B objectB, C objectC)
    {
        _objectB = objectB;
        _objectC = objectC;
    }
    public virtual int Operation(int number1, int number2)
    {
        int result = 0;

        result += _objectB.Multiply(number1, number2);
        result += _objectC.Divide(number1, number2);

        return result;
    }
}

Unit testing with mocking:

using Moq;
using Xunit;

public class ATest
{
    [Fact]
    public void Operation_MockDependencies_ShouldPass()
    {
        //Arrange
        Mock mockB = new Mock();
        Mock mockC = new Mock();
        var sut = new A(mockB.Object, mockC.Object);
        int number1 = 10;
        int number2 = 5;

        mockB.Setup(x => x.Multiply(number1, number2)).Returns(10);
        mockC.Setup(x => x.Divide(number1, number2)).Returns(25);

        //Act
        var result = sut.Operation(number1, number2);

        //Assert
        Assert.Equal(35, result);
    }
}

What is Moq


  • Moq is a mocking framework for .NET
  • Pronounce as “Mock-you” or “Mock”
  • It helps to isolate dependencies in unit testing
  • Nuget packages
  • Moq (4.10.1)
  • Reference: https://github.com/moq/moq4


xUnit sample

Class to be unit tested:

public class A
{
    B _objectB;
    C _objectC;

    public A(B objectB, C objectC)
    {
        _objectB = objectB;
        _objectC = objectC;
    }
    public virtual int Operation(int number1, int number2)
    {
        int result = 0;

        result += _objectB.Multiply(number1, number2);
        result += _objectC.Divide(number1, number2);

        return result;
    }
}

Unit test:

using Xunit;
public class ATest
{
    [Fact]
    public void Operation_WithCorrectParameters_ShouldPass()
    {
        //Arrange
        int number1 = 10;
        int number2 = 5;
        var sut = new A(new B(), new C());

        //Act
        var result = sut.Operation(number1, number2);

        //Assert
        Assert.Equal(52, result);
    }

}

What is xUnit


  • xUnit is unit testing tool for .NET framework
  • It is free & Open Source (Licensed under Apache)
  • Supports .NET core
  • Nuget packages
  • xunit (2.4.1)
  • Xunit.runner.visualstudio (2.4.1)
  • Reference: https://xunit.github.io/