Today we're shipping the first full release of the xUnit.net Analyzers package at 1.0.0!
The first commit to the analyzers project happened almost exactly 6 years ago on August 31, 2016. Marcin Dobosz was working at CenturyLink Cloud with Jim & Brad. His goal was to help developers identify the most common issues found when writing tests with xUnit.net, using his coworkers as the guinea pigs. 😄
The first official release was 0.1.0
, which shipped the following May
alongside the xUnit.net 2.3 Beta 2 release. This included
15 analyzers for test authors related to non-assertion usage by test authors (things
like ensuring the correct number of parameters in [InlineData()]
usage)
and 5 analyzers for test authors related to assertion usage (things like ensuring that
you are passing the expected
and actual
values in the
correct order).
In the intervening time between that first release and today, there were ten more
public releases in the 0.x
version system, usually aligned with beta
or RTM releases of the core framework.
With today's official 1.0 release, we now offer 28 non-assertion analyzers and 19 assertion analyzers, plus an entirely new category: 2 analyzers designed for developers who are writing extensions to the core framework.
These release notes reflect the entirety of the changes between 0.10.0 and 1.0.0.
msbuild
or dotnet build
) that doesn't surface the documentation
links. For example, xUnit1000's message used to read
"Test classes must be public"
, but now reads "Test classes must be public. Add or
change the visibility modifier of the test class to public."
out
value.
xunit/xunit#1802
IClassFixture
and/or ICollectionFixture
but
did not accept the fixture instance via the constructor.
xunit/xunit#2068
Assert.Equal(0, arraySegment.Count)
into Assert.Empty(arraySegment)
since ArraySegment<T>
can throw an exception when calling .GetEnumerator()
.
xunit/xunit#1970
.ConfigureAwait()
were not properly detected.
xunit/xunit.analyzers#126
xunit.abstractions
. The issue is still raised, but the fixer
is not available (since the reference to LongLivedMarshalByRefObject
requires a reference
to xunit.extensibility.execution
).
xunit/xunit#1574
xunit/xunit#1575