All Projects → feO2x → Light.GuardClauses

feO2x / Light.GuardClauses

Licence: MIT license
A lightweight .NET library for expressive Guard Clauses.

Programming Languages

C#
18002 projects

Projects that are alternatives of or similar to Light.GuardClauses

quid-pro-quo
A contract programming library for Common Lisp in the style of Eiffel’s Design by Contract ™.
Stars: ✭ 85 (+25%)
Mutual labels:  preconditions, design-by-contract
karma-expect
Expect.js adapter for Karma test runner
Stars: ✭ 12 (-82.35%)
Mutual labels:  assertions
Assertion
The power of Respect\Validation into an assertion library.
Stars: ✭ 23 (-66.18%)
Mutual labels:  assertions
phpsemver
Check if your changes are a major change, minor change or just a patch.
Stars: ✭ 28 (-58.82%)
Mutual labels:  assertions
concise
✅ Concise is test framework for using plain English and minimal code, built on PHPUnit.
Stars: ✭ 47 (-30.88%)
Mutual labels:  assertions
codeceptjs-bdd
Javascript BDD UI Automation Framework. Exclusive LWC Shadow DOM Support. Playwright, Webdriver.io, Appium, Saucelabs.
Stars: ✭ 35 (-48.53%)
Mutual labels:  assertions
vim-UT
Unit Testing plugin for Vim
Stars: ✭ 18 (-73.53%)
Mutual labels:  assertions
upssert
Simple REST API assertion framework
Stars: ✭ 13 (-80.88%)
Mutual labels:  assertions
oath
Design by contract in elixir
Stars: ✭ 43 (-36.76%)
Mutual labels:  design-by-contract
dbcppp
C/C++ DBC file parser/tool
Stars: ✭ 93 (+36.76%)
Mutual labels:  dbc
rust-claim
Assertion macros toolkit for Rust
Stars: ✭ 53 (-22.06%)
Mutual labels:  assertions
crystal-clear
Design by Contract for Crystal
Stars: ✭ 45 (-33.82%)
Mutual labels:  assertions
DBFilesClient.NET
Deprecated: See DBClientFiles.NET
Stars: ✭ 14 (-79.41%)
Mutual labels:  dbc
fluentcheck
Fluent assertions for Python
Stars: ✭ 79 (+16.18%)
Mutual labels:  assertions
tester
Lightweight test utilities to use with Go's testing package
Stars: ✭ 43 (-36.76%)
Mutual labels:  assertions
karate
Test Automation Made Simple
Stars: ✭ 6,384 (+9288.24%)
Mutual labels:  assertions
DBC2Excel
Convert DBC to Excel by VBA
Stars: ✭ 33 (-51.47%)
Mutual labels:  dbc
cantools
CAN bus tools.
Stars: ✭ 1,266 (+1761.76%)
Mutual labels:  dbc
Preconditions
Preconditions.NET provides convenience static methods to help check that a method or a constructor is invoked with proper parameter or not.
Stars: ✭ 17 (-75%)
Mutual labels:  preconditions
beJS
Simple, light-weight assertions framework for javascript
Stars: ✭ 12 (-82.35%)
Mutual labels:  assertions

Light.GuardClauses

A lightweight .NET library for expressive Guard Clauses.

License NuGet Source Code Documentation Documentation

Light.GuardClauses - easy precondition checks in C# / .NET

Read the full docs in the Wiki

As a software developer, you're used to writing if statements at the beginning of your methods which validate the parameters that are passed in. Most often you'll probably check for null:

public class Foo
{
    private readonly IBar _bar;
    
    public Foo(IBar? bar)
    {
        if (bar == null)
            throw new ArgumentNullException(nameof(bar));
        
        _bar = bar;
    }
}

Light.GuardClauses simplifies these precondition checks for you by providing extension methods that you can directly call on your parameters:

public class Foo
{
    private readonly IBar _bar;
    
    public Foo(IBar? bar)
    {
        _bar = bar.MustNotBeNull();
    }
}

As of version 10, Light.GuardClauses supports the CallerArgumentExpressionAttribute of C# 10. If your C# compiler is on a lower version, then the CallerArgumentExpressionAttribute might not be respected - you should then call all assertions with an explicit parameter name, e.g. bar.MustNotBeNull(nameof(bar)). You can use the C# 10 compiler by e.g. installing .NET 6 and/or Visual Studio 2022. The CallerArgumentExpressionAttribute is backwards-compatible, so it can be used with projects targeting .NET Standard 2, .NET Framework, or .NET Core.

By using Light.GuardClauses, you'll gain access to assertions for a vast amount of scenarios like checking strings, collections, enums, URIs, DateTime, Type, IComparable<T>, IEnumerable, IEnumerable<T>, and Span<T>. Just have a look at these examples:

public class ConsoleWriter
{
    private readonly ConsoleColor _foregroundColor;

    public ConsoleWriter(ConsoleColor foregroundColor = ConsoleColor.Black) =>
        _foregroundColor = foregroundColor.MustBeValidEnumValue();
}
public void SetMovieRating(Guid movieId, int numberOfStars)
{
    movieId.MustNotBeEmpty();
    numberOfStars.MustBeIn(Range.FromInclusive(0).ToInclusive(5));
    
    var movie = _movieRepo.GetById(movieId);
    movie.AddRating(numberOfStars);
}
public class WebGateway
{
    private readonly HttpClient _httpClient;
    private readonly Uri _targetUrl;

    public WebGateway(HttpClient? httpClient, Uri? targetUrl)
    {
        _httpClient = httpClient.MustNotBeNull();
        _targetUrl = targetUrl.MustBeHttpOrHttpsUrl();
    }
}

In addition to assertions that throw exceptions (all these start with Must), Light.GuardClauses provides assertions that return a Boolean. Some examples are:

  • string.IsNullOrWhitespace()
  • collection.IsNullOrEmpty()
  • enum.IsValidEnumValue()

You can use these in your branching logic to easily check if an assertion is true or false.

Every assertion is well-documented - explore them using IntelliSense or check out this overview.

Light.GuardClauses is optimized

Since version 4.x, Light.GuardClauses is optimized for performance (measured in .NET 4.8 and .NET 6). With the incredible help of @redknightlois and the awesome tool Benchmark.NET, most assertions are as fast as your imperative code would be.

Light.GuardClauses has support for .NET analyzers / FxCopAnalyzers with the ValidatedNotNullAttribute. Analyzers will know when an assertion validated that a parameters is not null and consequently, CA1062 will not be raised.

Furthermore, Light.GuardClauses has support for ReSharper since version 4.x. Via Contract Annotations, R# knows when assertions do not return a null value and thus removes squiggly lines indicating a possible NullReferenceException.

Light.GuardClauses supports C#8 Nullable Reference Types since version 8.0.

And, of course, the functional correctness of Light.GuardClauses is covered by a vast suite of automated tests.

Supported Platforms

Light.GuardClauses is built against .NET Standard 2.0 and 2.1, thus it can be used in frameworks like .NET 6, .NET Core 3.1, .NET Framework 4.6.1 or newer, Unity, Mono, or UWP.

How to Install

Light.GuardClauses is available as a NuGet package.

  • dotnet CLI: dotnet add package Light.GuardClauses
  • Visual Studio Package Manager Console: Install-Package Light.GuardClauses
  • Package Reference in csproj: <PackageReference Include="Light.GuardClauses" Version="10.0.0" />

Also, you can incorporate Light.GuardClauses as a single source file where the API is changed to internal. This is especially interesting for framework / library developers that do not want to have a dependency on the Light.GuardClauses DLL. You can grab the default .NET Standard 2.0 version in Light.GuardClauses.SingleFile.cs or you can use the Light.GuardClauses.SourceCodeTransformation project to create your custom file. You can learn more about it here.

Let there be... Light

Light Libraries Logo

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].