Do Nothing
The DoNothing method is used to arrange that a call to a method or property should be ignored. When using DoNothing, all the logic inside the arranged method or property body is skipped and nothing happens when you call it.
We will use the following interface for the examples in this article:
Sample setup
public interface IFoo
{
int Bar { get; set; }
void VoidCall();
}
Public Interface IFoo
Property Bar() As Integer
Function VoidCall()
End Interface
Skip the Logic of a Method
Before describing the usage of the DoNothing method, let's first see an example to illustrate it.
Example 1: Sample usage of DoNothing on a void method
[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 and nothing should happen, but still the method should be called during the execution of the test.
You can use DoNothing with non-void calls as well. For the example we will be using the following Foo class:
Sample setup
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
Example 2: Sample usage of DoNothing with non-void method
[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
Skip the Logic of a Property Setter
DoNothing can be also used on a call to a property set.
Example 4: Usage of DoNothing on property setter
[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