New to Telerik JustMockStart a free 30-day trial

Call Original

Updated on Jan 27, 2026

The CallOriginal method marks a mocked method/property call that should execute the original method/property implementation.

CallOriginal with Void Calls

You can use CallOriginal on methods and properties. This also includes methods that doesn't return a value. Consider the following class:

Sample setup

C#
public class Log
{
    public virtual void Info(string message)
    {
        throw new Exception(message);
    }
}

Let's arrange its Info method to be called with its original implementation and verify the call.

Example 1: Calling the original implementation

C#
[TestMethod]
[ExpectedException(typeof(Exception))]
public void MockAssertOnCallOriginal()
{
    // Arrange
    var log = Mock.Create<Log>();
    Mock.Arrange(() => log.Info(Arg.IsAny<string>())).CallOriginal();

    // Act
    log.Info("test");
}

The call of the Info method throws an exception. To verify this behavior, we use the ExpectedException attribute provided from the Microsoft.VisualStudio.TestTools.UnitTesting namespace (found in Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll).

CallOriginal Depending on Parameter Value

This section shows how you can set up that a call to a method should call the original implementation for one argument and fake for another argument.

For this example, we will use the following sample class:

Sample setup

C#
public class FooBase
{
    public string GetString(string str)
    {
        return str;
    }
}

Example 2 shows how to implement the different behavior of the mocked object depending on the parameter value the method is invoked with.

Example 2: Calling original implementation vs customizing method behavior depending on the parameter value

C#
[TestMethod]
public void ShouldCallOriginalForSpecificArgs()
{
    // Arrange
    // Create a mock of FooBase.
    var foo = Mock.Create<FooBase>();

    // Set up that the original method implementation should be called when the method is called with argument "x".
    Mock.Arrange(() => foo.GetString("x")).CallOriginal();
    // Set up that once the method is called with argument "y", it should return "z".
    Mock.Arrange(() => foo.GetString("y")).Returns("z");

    // Act
    var actualX = string.Empty;
    var actualY = string.Empty;
    
    actualX = foo.GetString("x");
    actualY = foo.GetString("y");

    var expectedX = "x";
    var expectedY = "z";

    // Assert
    Assert.AreEqual(expectedX, actualX);
    Assert.AreEqual(expectedY, actualY);
}

See Also