RSpec-Let
1.1.1
.NET Standard 2.0
.NET Framework 4.5
dotnet add package RSpec-Let --version 1.1.1
NuGet\Install-Package RSpec-Let -Version 1.1.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RSpec-Let" Version="1.1.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add RSpec-Let --version 1.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: RSpec-Let, 1.1.1"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install RSpec-Let as a Cake Addin
#addin nuget:?package=RSpec-Let&version=1.1.1
// Install RSpec-Let as a Cake Tool
#tool nuget:?package=RSpec-Let&version=1.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Let.cs
When testing in C# it's not unusual to test instances of a class. The problem is we all face though is knowing where to initialize our objects.
- Create a field that is initialized and reset on
TearDown
? - Create a null field that is initialized during
[SetUp]
? - Duplicate the initialization in every
[Test]
?
All three of these are valid, and unfortunately, all three can be found in the same project and sometimes the same test!
namespace DoYourTestsLookLikeThis
{
[TestFixture]
public class InsertTearsEmoji
{
private UnitOfWork _work = new UnitOfWork();
private Mock<IArticlesService> MockArticlesService { get; set; }
[SetUp]
public void BeforeEach()
{
MockArticlesService = new Mock<IArticlesService>();
}
[TearDown]
public void AfterEach()
{
// ððð
_work = new UnitOfWork();
}
[Test]
public void IndexShouldLoadPublishedArticles()
{
var controller = new ArticlesController(MockArticlesService.Object);
controller.Index();
MockArticlesService.Verify(service => service.Published(), Times.Once);
}
}
}
It's dangerous to go alone, take Let.cs with you ðĪš
namespace HappyDance
{
// This allows us to call +Let+ directly
using static LetTestHelper.LetHelper;
[TestFixture]
public class ArticlesControllerTest
{
private UnitOfWork Work => Let(() => new UnitOfWork());
private Mock<IArticlesService> MockArticlesService => Let(() => new Mock<IArticlesService>());
// It's so easy, why not move it here too
private ArticlesController Controller => Let(() => new ArticlesController(MockArticlesService.Object);
[TearDown]
public void AfterEach()
{
// You may cry, but only once (see below ð)
LetTestHelper.LetHelper.Flush();
}
[Test]
public void IndexShouldLoadPublishedArticles()
{
Controller.Index();
MockArticlesService.Verify(service => service.Published(), Times.Once);
}
}
}
Flush the Cache ð―
- After each test you will need to manually flush the results. My recommendation is creating a test helper that will flush the cache on tear down.
namespace MyProject.TestHelper
{
[TestFixture]
public class TestBase
{
[TearDown]
public void Clean_LetHelper()
{
LetTestHelper.LetHelper.Flush();
}
}
}
Inspiration
Coming from Ruby I found instance management in C# to be, well, not fun. This is
is influenced by RSpec let
.
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.0-windows |
.NET Core | netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Standard | netstandard2.0 netstandard2.1 |
.NET Framework | net45 net451 net452 net46 net461 net462 net463 net47 net471 net472 net48 net481 |
MonoAndroid | monoandroid |
MonoMac | monomac |
MonoTouch | monotouch |
Tizen | tizen40 tizen60 |
Xamarin.iOS | xamarinios |
Xamarin.Mac | xamarinmac |
Xamarin.TVOS | xamarintvos |
Xamarin.WatchOS | xamarinwatchos |
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.
-
.NETFramework 4.5
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.