Why is this an issue?
A method is detected as test method if marked with one of the following attributes [TestMethod]
or [DataTestMethod]
(for
mstest), [Fact]
or [Theory]
(for xunit) or [Test]
, [TestCase]
, [TestCaseSource]
or
[Theory]
(for nunit). However, whether or not they have a test attribute, non-public
methods are not recognized as tests,
and therefore not executed. Neither are async
void
methods, or methods with generics anywhere in their signatures.
Noncompliant code example
[TestMethod]
void TestNullArg() // Noncompliant; method is not public
{ /* ... */ }
[TestMethod]
public async void MyIgnoredTestMethod() // Noncompliant; this is an 'async void' method
{ /* ... */ }
[TestMethod]
public void MyIgnoredGenericTestMethod<T>(T foo) // Noncompliant; method has generics in its signature
{ /* ... */ }
Compliant solution
[TestMethod]
public void TestNullArg()
{ /* ... */ }
Exceptions
Accessibility is ignored for xUnit Fact
test methods, since they do not need to be public
.
[Theory]
test methods in xUnit and [TestCase]
and [TestCaseSource]
test methods in nunit can be generic.