RSCG – mocklis
RSCG – mocklis
name | mocklis |
nuget | https://www.nuget.org/packages/mocklis/ |
link | https://mocklis.readthedocs.io/en/latest/getting-started/index.html |
author | Esbjörn Redmo |
Generating mocks from classes for unit tests
This is how you can use mocklis .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <IsPackable>false</IsPackable> <IsTestProject>true</IsTestProject> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0-preview-23577-04" /> <PackageReference Include="Mocklis" Version="1.4.0-alpha.2" /> <PackageReference Include="MSTest.TestAdapter" Version="3.2.0-preview.23623.1" /> <PackageReference Include="MSTest.TestFramework" Version="3.2.0-preview.23623.1" /> <PackageReference Include="coverlet.collector" Version="6.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup> <ItemGroup> <ProjectReference Include="..\MockLisClock\MockLisClock.csproj" /> </ItemGroup> <PropertyGroup> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath> </PropertyGroup> </Project>
The code that you will use is
namespace TestClock; [MocklisClass] public partial class TestMock : IMyClock { }
using Mocklis; namespace TestClock; [TestClass] public class TestClock { [TestMethod] public void TestMyClock() { var mockSetup = new TestMock(); mockSetup.GetNow.Return(DateTime.Now.AddYears(-1)); // When testing the mock like this you need to cast to the interface. // This is different from e.g. Moq where the mocked instance and the 'programming interface' are different things. // With Mocklis they are the same. The 99% case is where the mock is passed to another constructor as a dependency, // in which case there's an implicit cast to the interface. var mock = (IMyClock)mockSetup; var data = mock.GetNow(); Assert.AreEqual(DateTime.Now.Year - 1, data.Year); } }
global using Microsoft.VisualStudio.TestTools.UnitTesting; global using MockTest; global using Mocklis.Core;
The code that is generated is
// <auto-generated /> #nullable enable namespace TestClock { partial class TestMock { public global::Mocklis.Core.FuncMethodMock<global::System.DateTime> GetNow { get; } global::System.DateTime global::MockTest.IMyClock.GetNow() => GetNow.Call(); public global::Mocklis.Core.FuncMethodMock<global::System.DateTime> GetUtcNow { get; } global::System.DateTime global::MockTest.IMyClock.GetUtcNow() => GetUtcNow.Call(); public TestMock() : base() { this.GetNow = new global::Mocklis.Core.FuncMethodMock<global::System.DateTime>(this, "TestMock", "IMyClock", "GetNow", "GetNow", global::Mocklis.Core.Strictness.Lenient); this.GetUtcNow = new global::Mocklis.Core.FuncMethodMock<global::System.DateTime>(this, "TestMock", "IMyClock", "GetUtcNow", "GetUtcNow", global::Mocklis.Core.Strictness.Lenient); } } }
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/mocklis
Leave a Reply