Merge pull request #80 from telerik/tdimitrova/do-nothing

Updated DoNothing
This commit is contained in:
Mihail Vladov 2021-08-06 18:49:31 +03:00 коммит произвёл GitHub
Родитель fa82109259 7e617f9ff1
Коммит 82911ca396
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 192 добавлений и 217 удалений

Просмотреть файл

@ -1,217 +1,192 @@
---
title: Do Nothing
page_title: Do Nothing | JustMock Documentation
description: Do Nothing
previous_url: /basic-usage-mock-do-nothing.html
slug: justmock/basic-usage/mock/do-nothing
tags: do,nothing
published: True
position: 2
---
# 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:
#### __[C#]__
{{region DoNothing#IFooSUT}}
public interface IFoo
{
int Bar { get; set; }
void VoidCall();
}
{{endregion}}
#### __[VB]__
{{region DoNothing#IFooSUT}}
Public Interface IFoo
Property Bar() As Integer
Function VoidCall()
End Interface
{{endregion}}
## Assert Void Call
Before describing the usage of the `DoNothing` method, let's first see an example to illustrate it.
#### __[C#]__
{{region DoNothing#AssertDoNothingOnVoidCall}}
[TestMethod]
public void SimpleExampleWithDoNothing()
{
// Arrange
var foo = Mock.Create<IFoo>();
Mock.Arrange(() => foo.VoidCall()).DoNothing().MustBeCalled();
// Act
foo.VoidCall();
// Assert
Mock.Assert(foo);
}
{{endregion}}
#### __[VB]__
{{region DoNothing#AssertDoNothingOnVoidCall}}
<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
{{endregion}}
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.
#### __[C#]__
{{region DoNothing#Example}}
[TestMethod]
public void ShouldShowHowDoNothingIsUsed()
{
// Arrange
var foo = Mock.Create<IFoo>();
Mock.Arrange(() => foo.VoidCall()).MustBeCalled();
Mock.Arrange(() => foo.VoidCall()).DoNothing().MustBeCalled();
}
{{endregion}}
#### __[VB]__
{{region DoNothing#Example}}
<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
{{endregion}}
You can use `DoNothing` with non-void calls as well. For the example we will be using the following `Foo` class:
#### __[C#]__
{{region DoNothing#FooSUT}}
public class Foo
{
public int Echo(int num)
{
return num;
}
}
{{endregion}}
#### __[VB]__
{{region DoNothing#FooSUT}}
Public Class Foo
Function Echo(num As Integer) As Integer
Throw New NotImplementedException
End Function
End Class
{{endregion}}
#### __[C#]__
{{region DoNothing#ExampleNonVoid}}
[TestMethod]
public void DoNothingWithNonPublicCalls()
{
// Arrange
var foo = Mock.Create<Foo>();
Mock.Arrange(() => foo.Echo(Arg.AnyInt)).DoNothing();
// Act
foo.Echo(10);
}
{{endregion}}
#### __[VB]__
{{region DoNothing#ExampleNonVoid}}
<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
{{endregion}}
## Assert DoNothing on property set
`DoNothing` can be also used on a call to a property set.
#### __[C#]__
{{region DoNothing#AssertDoNothingOnPropertySet}}
[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);
}
{{endregion}}
#### __[VB]__
{{region DoNothing#AssertDoNothingOnPropertySet}}
<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
{{endregion}}
# See Also
* [Call Original]({%slug justmock/basic-usage/mock/call-original%})
* [Do Instead]({%slug justmock/basic-usage/mock/do-instead%})[](b9461116-b200-4739-aff1-af8458c7095e)
* [Must Be Called]({%slug justmock/basic-usage/mock/must-be-called%})
* [Raise]({%slug justmock/basic-usage/mock/raise%})
* [Raises]({%slug justmock/basic-usage/mock/raises%})
* [Returns]({%slug justmock/basic-usage/mock/returns%})
* [Throws]({%slug justmock/basic-usage/mock/throws%})
---
title: Do Nothing
page_title: Do Nothing | JustMock Documentation
description: Do Nothing
previous_url: /basic-usage-mock-do-nothing.html
slug: justmock/basic-usage/mock/do-nothing
tags: do,nothing
published: True
position: 2
---
# 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:
#### __[C#] Sample setup__
{{region DoNothing#IFooSUT}}
public interface IFoo
{
int Bar { get; set; }
void VoidCall();
}
{{endregion}}
#### __[VB] Sample setup__
{{region DoNothing#IFooSUT}}
Public Interface IFoo
Property Bar() As Integer
Function VoidCall()
End Interface
{{endregion}}
## Skip the Logic of a Method
Before describing the usage of the `DoNothing` method, let's first see an example to illustrate it.
#### __[C#] Example 1: Sample usage of DoNothing on a void method__
{{region DoNothing#AssertDoNothingOnVoidCall}}
[TestMethod]
public void SimpleExampleWithDoNothing()
{
// Arrange
var foo = Mock.Create<IFoo>();
Mock.Arrange(() => foo.VoidCall()).DoNothing().MustBeCalled();
// Act
foo.VoidCall();
// Assert
Mock.Assert(foo);
}
{{endregion}}
#### __[VB] Example 1: Sample usage of DoNothing on a void method__
{{region DoNothing#AssertDoNothingOnVoidCall}}
<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
{{endregion}}
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:
#### __[C#] Sample setup__
{{region DoNothing#FooSUT}}
public class Foo
{
public int Echo(int num)
{
return num;
}
}
{{endregion}}
#### __[VB] Sample setup__
{{region DoNothing#FooSUT}}
Public Class Foo
Function Echo(num As Integer) As Integer
Throw New NotImplementedException
End Function
End Class
{{endregion}}
#### __[C#] Example 2: Sample usage of DoNothing with non-void method__
{{region DoNothing#ExampleNonVoid}}
[TestMethod]
public void DoNothingWithNonPublicCalls()
{
// Arrange
var foo = Mock.Create<Foo>();
Mock.Arrange(() => foo.Echo(Arg.AnyInt)).DoNothing();
// Act
foo.Echo(10);
}
{{endregion}}
#### __[VB] Example 2: Sample usage of DoNothing with non-void method__
{{region DoNothing#ExampleNonVoid}}
<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
{{endregion}}
## Skip the Logic of a Property Setter
`DoNothing` can be also used on a call to a property set.
#### __[C#] Example 4: Usage of DoNothing on property setter__
{{region DoNothing#AssertDoNothingOnPropertySet}}
[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);
}
{{endregion}}
#### __[VB] Example 4: Usage of DoNothing on property setter__
{{region DoNothing#AssertDoNothingOnPropertySet}}
<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
{{endregion}}
# See Also
* [Call Original]({%slug justmock/basic-usage/mock/call-original%})
* [Do Instead]({%slug justmock/basic-usage/mock/do-instead%})
* [Must Be Called]({%slug justmock/basic-usage/mock/must-be-called%})
* [Raise]({%slug justmock/basic-usage/mock/raise%})
* [Raises]({%slug justmock/basic-usage/mock/raises%})
* [Returns]({%slug justmock/basic-usage/mock/returns%})
* [Throws]({%slug justmock/basic-usage/mock/throws%})