Do Nothing

The DoNothing method is used to arrange that a call to a method or property should be ignored. We will use the following interface for the examples in this article:

public interface IFoo 
{ 
    int Bar { get; set; } 
    void VoidCall(); 
} 
Public Interface IFoo 
    Property Bar() As Integer 
    Function VoidCall() 
End Interface 

Assert Void Call

Before describing the usage of the DoNothing method, let's first see an example to illustrate it.

[TestMethod] 
public void SimpleExampleWithDoNothing() 
{ 
    // Arrange 
    var foo = Mock.Create<IFoo>(); 
 
    Mock.Arrange(() => foo.VoidCall()).DoNothing().MustBeCalled(); 
 
    // Act 
    foo.VoidCall(); 
 
    // Assert 
    Mock.Assert(foo); 
} 
<TestMethod()> 
Public Sub SimpleExampleWithDoNothing() 
    ' Arrange 
    Dim foo = Mock.Create(Of IFoo)() 
 
    Mock.Arrange(Function() foo.VoidCall()).DoNothing().MustBeCalled() 
 
    ' Act 
    foo.VoidCall() 
 
    ' Assert 
    Mock.Assert(foo) 
End Sub 

In the example, we mark foo.VoidCall() with DoNothing and MustBeCalled. In this way we indicate that a call to foo.VoidCall must be ignored, but still the method should be called during the execution of the test. We can achieve the same behavior without marking the call with DoNothing. Marking it explicitly improves the code readability. The DoNothing method makes no functional difference in the test execution, just a good practice to improve your code. The following two lines are functionally equivalent.

[TestMethod] 
public void ShouldShowHowDoNothingIsUsed() 
{ 
    // Arrange 
    var foo = Mock.Create<IFoo>(); 
 
    Mock.Arrange(() => foo.VoidCall()).MustBeCalled(); 
    Mock.Arrange(() => foo.VoidCall()).DoNothing().MustBeCalled(); 
} 
<TestMethod()> 
Public Sub ShouldShowHowDoNothingIsUsed() 
    ' Arrange 
    Dim foo = Mock.Create(Of IFoo)() 
 
    Mock.Arrange(Function() foo.VoidCall()).MustBeCalled() 
    Mock.Arrange(Function() foo.VoidCall()).DoNothing().MustBeCalled() 
End Sub 

You can use DoNothing with non-void calls as well. For the example we will be using the following Foo class:

public class Foo 
{ 
    public int Echo(int num) 
    { 
        return num; 
    } 
} 
Public Class Foo 
    Function Echo(num As Integer) As Integer 
        Throw New NotImplementedException 
    End Function 
End Class 

[TestMethod] 
public void DoNothingWithNonPublicCalls() 
{ 
    // Arrange 
    var foo = Mock.Create<Foo>(); 
 
    Mock.Arrange(() => foo.Echo(Arg.AnyInt)).DoNothing(); 
 
    // Act 
    foo.Echo(10); 
} 
<TestMethod()> 
Public Sub DoNothingWithNonPublicCalls() 
    ' Arrange 
    Dim foo = Mock.Create(Of Foo)() 
    Mock.Arrange(Function() foo.Echo(Arg.AnyInt)).DoNothing() 
 
    ' Act 
    foo.Echo(10) 
End Sub 

Assert DoNothing on property set

DoNothing can be also used on a call to a property set.

[TestMethod] 
public void AssertDoNothingOnPropertySet() 
{ 
    // Arrange 
    var foo = Mock.Create<IFoo>(); 
 
    Mock.ArrangeSet(() => foo.Bar = 1).DoNothing().MustBeCalled(); 
 
    // Act 
    foo.Bar = 1; 
 
    // Assert 
    Mock.Assert(foo); 
} 
<TestMethod()> 
Public Sub DAssertDoNothingOnPropertySet() 
    'Arrange 
    Dim foo = Mock.Create(Of IFoo)() 
    Mock.ArrangeSet(Sub() foo.Bar = 0).DoNothing().MustBeCalled() 
 
    'Act 
    foo.Bar = 0 
 
    'Assert 
    Mock.Assert(foo) 
End Sub 

See Also

In this article
Not finding the help you need? Improve this article