record, FrozenDictionary, WireMock
Everything You Want to Know About the Record Type in .NET… But Were Afraid to Ask
I should remember to use C# record types more often.
- use
initfor properties to make them immutable (only settable in the constructor) - clone record by using
with - equality and comparison methods are automatically generated
- hashing and
ToStringmethods are automatically generated
C# Records
Continuing the same subject, this article reminds us that there are two ways of defining constructors:
1
public record Song(string artist, string title);
is the same as
1
2
3
4
5
public record Song
{
public string Title { get; init; }
public string Artist { get; init; }
}
but it’s also possible to use set instead of init in the above, which makes the properties mutable
(I’m not sure why you’d want that).
Also, about with:
This is copying the reference, not cloning:
1
song2 = song1;
This is a creating a clone:
1
song2 = song1 with {};
This is a copy with a different value for one property:
1
song2 = song1 with { Title = "It's me" };
FrozenDictionary under the hood: how fast is it comparing to Dictionary and why
In case you ever need an immutable dictionary, .Net 8 introduced
FrozenDictionary.
Apart from the obvious case of making it explicit that it’s immutable,
the fact that’s it’s immutable allows for some performance improvements such that it’s always faster than a regular Dictionary.
How to use IHttpClientFactory and WireMock.NET together using Moq
Nice explanation of how to use
WireMock
to test classes that use IHttpClientFactory.
Your class has IHttpClientFactory injected into it and calls CreateClient() on it to get an HttpClient.
To test this class:
- Create a WireMock server called
_serverinOneTimeSetUp - Configure your mocked
IHttpClientFactory.CreateClient()to return_server.CreateClient() - Setup your tests to do things like this:
1
2
3
_server
.Given(Request.Create().WithPath("/api/books/42").UsingGet())
.RespondWith(Response.Create().WithStatusCode(404));
