Rocks 7.0.0-alpha.3
See the version list below for details.
dotnet add package Rocks --version 7.0.0-alpha.3
NuGet\Install-Package Rocks -Version 7.0.0-alpha.3
<PackageReference Include="Rocks" Version="7.0.0-alpha.3" />
paket add Rocks --version 7.0.0-alpha.3
#r "nuget: Rocks, 7.0.0-alpha.3"
// Install Rocks as a Cake Addin #addin nuget:?package=Rocks&version=7.0.0-alpha.3&prerelease // Install Rocks as a Cake Tool #tool nuget:?package=Rocks&version=7.0.0-alpha.3&prerelease
Rocks
A mocking library based on the Compiler APIs (Roslyn + Mocks)
Overview
There are great mocking libraries out there, like Moq and NSubstitute, so why did I decide to create YAML (yet another mocking library) in 2015? There are essentially two reasons.
The first reason relates to how code generation was done with mocking libraries. Most (if not all) used an approach that ends up using System.Reflection.Emit
, which requires knowledge of IL. This is not a trivial endeavour. Furthermore, the generated code can't be stepped into during a debugging process. I wanted to write a mocking library with the new Compiler APIs (Roslyn) to see if I could make the code generation process for the mock much easier and allow a developer to step into that code if necessary.
The other reason was being able to pre-generate the mocks for a given assembly, rather than dynamically generate them in a test. This is what the Microsoft Fakes Library can do, but I wanted to be able to do it where I could easily modify a project file and automatically generate those mocks.
This is what Rocks can do. Mocks are created by generating C# code on the fly and compiling it with the Compiler APIs. This makes it trivial to step into the mock code. Before the 5.0.0 version, this code generation step took place at runtime, but with source generators in C# 9, this generation happens as soon as you state that you want to create a mock of a particular type. So, feel free to test Rocks out, and see what you think. Even if you don't use it as your primary mocking library, you may see just how easy it to generate code on the fly with the new Compiler APIs. Enjoy!
Tutorial
To make a mock, you take an interface or an unsealed class that has virtual members:
public interface IAmSimple
{
void TargetAction();
}
and you use Rocks to create a mock with expectations, along with verifying its usage:
var mock = Rock.Create<IAmSimple>();
mock.Methods().TargetAction();
var simpleInstance = mock.Instance();
simpleInstance.TargetAction();
mock.Verify();
More details can be found on the Quickstart page. Note that if you build the code locally, you'll need to build in Release
mode for the package reference in Rocks.NuGetHost
to resolve correctly (or unload that project from the solution as it's optional and delete nuget.config
).
Changelog
A changelog was (finally!) added, starting from the 6.4.4
version. You can read it here.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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 was computed. 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 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
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. |
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp (>= 4.4.0-2.final)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Rocks:
Package | Downloads |
---|---|
Stashbox.Rocks
Rocks auto mocking integration for Stashbox. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
9.0.0-alpha.1 | 32 | 10/22/2024 |
8.3.1 | 811 | 10/2/2024 |
8.3.1-alpha.1 | 53 | 9/29/2024 |
8.3.0 | 1,276 | 7/24/2024 |
8.2.0 | 279 | 7/17/2024 |
8.1.0 | 805 | 4/16/2024 |
8.0.0 | 589 | 1/22/2024 |
8.0.0-alpha.3 | 66 | 1/21/2024 |
8.0.0-alpha.2 | 69 | 1/14/2024 |
8.0.0-alpha.1 | 83 | 1/13/2024 |
7.3.0 | 652 | 11/26/2023 |
7.2.0 | 318 | 11/10/2023 |
7.1.4 | 349 | 10/7/2023 |
7.1.3 | 573 | 7/31/2023 |
7.1.2 | 174 | 7/26/2023 |
7.1.1 | 227 | 7/17/2023 |
7.1.0 | 341 | 7/3/2023 |
7.0.1 | 564 | 3/30/2023 |
7.0.0 | 880 | 11/20/2022 |
7.0.0-alpha.3 | 107 | 11/9/2022 |
7.0.0-alpha.2 | 111 | 10/10/2022 |
7.0.0-alpha.1 | 114 | 9/10/2022 |
6.4.5 | 1,027 | 6/29/2022 |
6.4.4 | 515 | 6/28/2022 |
6.4.3 | 593 | 5/23/2022 |
6.4.2 | 461 | 5/22/2022 |
6.4.1 | 813 | 4/15/2022 |
6.4.0 | 544 | 3/22/2022 |
6.3.0 | 6,443 | 11/24/2021 |
6.2.0 | 538 | 10/20/2021 |
6.0.0 | 584 | 4/12/2021 |
5.1.2 | 7,907 | 1/21/2021 |
5.1.1 | 486 | 1/21/2021 |
5.1.0 | 482 | 12/21/2020 |
5.0.0 | 492 | 12/10/2020 |
5.0.0-rc3 | 298 | 12/8/2020 |
5.0.0-rc2 | 313 | 12/2/2020 |
5.0.0-rc1 | 413 | 11/14/2020 |
4.2.1 | 690 | 7/25/2020 |
4.2.0 | 545 | 7/2/2020 |
4.1.1 | 610 | 4/27/2020 |
4.1.0 | 635 | 2/26/2020 |
4.0.0 | 1,055 | 9/23/2019 |
4.0.0-rc.2 | 308 | 8/10/2019 |
4.0.0-rc.1 | 298 | 7/18/2019 |
3.1.0 | 5,238 | 11/4/2017 |
3.0.0 | 2,619 | 8/18/2017 |
2.2.0 | 2,601 | 7/6/2017 |
2.1.7 | 2,590 | 7/4/2017 |
2.1.6 | 2,633 | 7/4/2017 |
2.1.5 | 2,594 | 7/4/2017 |
2.1.4 | 2,576 | 7/2/2017 |
2.1.3 | 2,588 | 7/2/2017 |
2.1.2 | 2,530 | 7/1/2017 |
2.1.1 | 2,606 | 7/1/2017 |
2.1.0 | 3,246 | 5/19/2017 |
2.0.0 | 3,537 | 5/1/2017 |
2.0.0-beta | 2,287 | 4/30/2017 |
1.1.1 | 2,603 | 5/4/2016 |
1.0.0 | 2,577 | 1/29/2016 |
1.0.0-beta1 | 2,700 | 8/8/2015 |