-
AutoFixture
AutoFixture is an open source library for .NET designed to minimize the 'Arrange' phase of your unit tests in order to maximize maintainability. Its primary goal is to allow developers to focus on what is being tested rather than how to setup the test scenario, by making it easier to create object graphs containing test data.
His AutoFixture C# NuGet takes away so much pain from unit test maintenance. It does have a learning curve.
https://github.com/AutoFixture/AutoFixture
-
Stream
Stream - Scalable APIs for Chat, Feeds, Moderation, & Video. Stream helps developers build engaging apps that scale to millions with performant and flexible Chat, Feeds, Moderation, and Video APIs and SDKs powered by a global edge network and enterprise-grade infrastructure.
-
I am surprised by the DI discomfort in this thread.
This is rough really worth understanding: https://github.com/mhevery/guide-to-testable-code/blob/main/...
Short version: https://github.com/mhevery/guide-to-testable-code/blob/main/...
Those were written/presented by an early google test engineer who came to the conclusion that you can't make writing tests easier, you can only make code that is more easily testable. He further believed that code that is trivially testable is higher quality code because the things that make it more testable are things that reduce overall complexity (not abusing global state, separating program structure/object graph construction from business logic execution, thinking about object lifetimes, etc.)
Misko Hevery used to have a blog with amazing examples which he explored in depth and gave very strong justifications for every one of those tactics listed. Sad to see it is now offline, an archive might have it.
-
Guice
Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 11 and above, brought to you by Google.
I meant "singleton" in the sense of a single value for a type shared by anything that requires one, i.e. a Guice singleton ( https://github.com/google/guice/wiki/scopes#built-in-scopes ) not a value in global scope. Parameterless constructors prohibit you from using these (unless you have global variables).