SMock 2.2.0
dotnet add package SMock --version 2.2.0
NuGet\Install-Package SMock -Version 2.2.0
<PackageReference Include="SMock" Version="2.2.0" />
paket add SMock --version 2.2.0
#r "nuget: SMock, 2.2.0"
// Install SMock as a Cake Addin #addin nuget:?package=SMock&version=2.2.0 // Install SMock as a Cake Tool #tool nuget:?package=SMock&version=2.2.0
SMock
SMock is opensource lib for mocking static and instance methods and properties. API Documntation
Installation
Download and install the package from NuGet or GitHub
Getting Started
Hook Manager Types
SMock is based on MonoMod library that produce hook functionality
Code Examples
Setup is possible in two ways Hierarchical and Sequential
Returns (Hierarchical)
Mock.Setup(context => StaticClass.MethodToMock(context.It.IsAny<int>()), () =>
{
var actualResult = StaticClass.MethodToMock(1);
ClassicAssert.AreNotEqual(originalResult, actualResult);
ClassicAssert.AreEqual(expectedResult, actualResult);
}).Returns(expectedResult);
Mock.Setup(context => StaticClass.MethodToMock(context.It.IsAny<int>()), () =>
{
var actualResult = StaticClass.MethodToMock(1);
ClassicAssert.AreNotEqual(originalResult, actualResult);
ClassicAssert.AreEqual(expectedResult, actualResult);
}).Returns(() => expectedResult);
Mock.Setup(context => StaticClass.MethodToMock(context.It.Is<int>(x => x == 1)), () =>
{
var actualResult = StaticClass.MethodToMock(1);
ClassicAssert.AreNotEqual(originalResult, actualResult);
ClassicAssert.AreEqual(expectedResult, actualResult);
}).Returns<int>(argument => argument);
Mock.Setup(context => StaticClass.MethodToMockAsync(context.It.IsAny<int>()), async () =>
{
var actualResult = await StaticClass.MethodToMockAsync(1);
ClassicAssert.AreNotEqual(originalResult, actualResult);
ClassicAssert.AreEqual(expectedResult, actualResult);
}).Returns<int>(async argument => await Task.FromResult(argument));
Other returns hierarchical setup examples
Returns (Sequential)
using var _ = Mock.Setup(context => StaticClass.MethodToMock(context.It.IsAny<int>()))
.Returns(expectedResult);
var actualResult = StaticClass.MethodToMock(1);
ClassicAssert.AreNotEqual(originalResult, actualResult);
ClassicAssert.AreEqual(expectedResult, actualResult);
Other returns sequential setup examples
Throws (Hierarchical)
Mock.Setup(() => StaticClass.MethodToMock(), () =>
{
Assert.Throws<Exception>(() => StaticClass.MethodToMock());
}).Throws<Exception>();
Other throws hierarchical setup examples
Throws (Sequential)
using var _ = Mock.Setup(() => StaticClass.MethodToMock()).Throws<Exception>();
Assert.Throws<Exception>(() => StaticClass.MethodToMock());
Other throws sequential setup examples
Callback (Hierarchical)
Mock.Setup(() => StaticClass.MethodToMock(), () =>
{
var actualResult = StaticClass.MethodToMock();
ClassicAssert.AreNotEqual(originalResult, actualResult);
ClassicAssert.AreEqual(expectedResult, actualResult);
}).Callback(() =>
{
DoSomething();
});
Mock.Setup(context => StaticClass.MethodToMock(context.It.IsAny<int>()), () =>
{
var actualResult = StaticClass.MethodToMock(1);
ClassicAssert.AreNotEqual(originalResult, actualResult);
ClassicAssert.AreEqual(expectedResult, actualResult);
}).Callback<int>(argument =>
{
DoSomething(argument);
});
Other callback hierarchical setup examples
Callback (Sequential)
using var _ = Mock.Setup(() => StaticClass.MethodToMock()).Callback(() =>
{
DoSomething();
});
var actualResult = StaticClass.MethodToMock();
ClassicAssert.AreNotEqual(originalResult, actualResult);
ClassicAssert.AreEqual(expectedResult, actualResult);
Other callback sequential setup examples
Library license
The library is available under the MIT license.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 is compatible. net463 was computed. net47 is compatible. net471 is compatible. net472 is compatible. net48 is compatible. net481 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.6.2
- MonoMod.RuntimeDetour (>= 22.7.31.1)
-
.NETFramework 4.7
- MonoMod.RuntimeDetour (>= 22.7.31.1)
-
.NETFramework 4.7.1
- MonoMod.RuntimeDetour (>= 22.7.31.1)
-
.NETFramework 4.7.2
- MonoMod.RuntimeDetour (>= 22.7.31.1)
-
.NETFramework 4.8
- MonoMod.RuntimeDetour (>= 22.7.31.1)
-
.NETFramework 4.8.1
- MonoMod.RuntimeDetour (>= 22.7.31.1)
-
.NETStandard 2.0
- MonoMod.RuntimeDetour (>= 25.1.0)
- System.Reflection.Emit (>= 4.7.0)
-
net6.0
- MonoMod.RuntimeDetour (>= 25.1.0)
-
net7.0
- MonoMod.RuntimeDetour (>= 25.1.0)
-
net8.0
- MonoMod.RuntimeDetour (>= 25.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2.2.0 | 4,604 | 2/8/2024 |
2.1.0 | 42,550 | 8/29/2023 |
2.0.0 | 226 | 7/16/2023 |
1.8.0 | 815 | 12/13/2022 |
1.7.1 | 2,001 | 8/27/2022 |
1.7.0 | 437 | 8/27/2022 |
1.6.0 | 612 | 12/21/2021 |
1.5.0 | 354 | 8/2/2021 |
1.4.0 | 357 | 7/18/2021 |
1.3.0 | 353 | 7/1/2021 |
1.2.1 | 353 | 5/17/2021 |
1.2.0 | 392 | 5/5/2021 |
1.1.0 | 353 | 4/30/2021 |
1.0.0 | 371 | 4/27/2021 |