After spending some time on digging through unit testing components, I ran into a setup I am finally happy with. This consists of:
https://github.com/AutoFixture – acts as DI container/object factory, significantly improving unit test maintainability
https://github.com/moq – awesome mocking framework, fully integrated with AutoFixture
https://www.nuget.org/packages/SemanticComparison – excellent utility for comparing instances
https://github.com/shouldly/shouldly – great for simplifying assertion statements
https://github.com/xunit/xunit – superb unit testing framework, supporting parameterized tests, multiple test executions and much more
Although each utility is great on it’s own, when combined together, this stack significantly reduces amount of testing code.
Below I include sample config file with latest versions of all packages.
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AutoFixture" version="3.50.2" targetFramework="net461" />
<package id="AutoFixture.AutoMoq" version="3.50.2" targetFramework="net461" />
<package id="AutoFixture.Idioms" version="3.50.2" targetFramework="net461" />
<package id="AutoFixture.Xunit2" version="3.50.2" targetFramework="net461" />
<package id="Moq" version="4.1.1308.2120" targetFramework="net461" />
<package id="SemanticComparison" version="3.50.2" targetFramework="net461" />
<package id="Shouldly" version="2.8.2" targetFramework="net461" />
<package id="xunit" version="2.1.0" targetFramework="net461" />
<package id="xunit.abstractions" version="2.0.0" targetFramework="net461" />
<package id="xunit.assert" version="2.1.0" targetFramework="net461" />
<package id="xunit.core" version="2.1.0" targetFramework="net461" />
<package id="xunit.extensibility.core" version="2.1.0" targetFramework="net461" />
<package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net461" />
<package id="xunit.runner.visualstudio" version="2.1.0" targetFramework="net461" />
</packages>