rspec/rules/S3431/csharp/rule.adoc
2021-04-28 18:08:03 +02:00

54 lines
1.0 KiB
Plaintext

It should be clear to a casual reader what code a test is testing and what results are expected. Unfortunately, that's not usually the case with the ``++[ExpectedException]++`` attribute since an exception could be thrown from almost any line in the method.
This rule detects MSTest and NUnit ``++ExpectedException++`` attribute.
== Noncompliant Code Example
----
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))] // Noncompliant
public void TestNullArg()
{
//...
}
----
== Compliant Solution
----
[TestMethod]
public void TestNullArg()
{
bool callFailed = false;
try
{
//...
}
catch (ArgumentNullException)
{
callFailed = true;
}
Assert.IsTrue(callFailed, "Expected call to MyMethod to fail with ArgumentNullException");
}
----
or
----
[TestMethod]
public void TestNullArg()
{
Assert.ThrowsException<ArgumentNullException>(() => /*...*/);
}
----
== Exceptions
This rule ignores one-line test methods, since it is obvious in such methods where the exception is expected to be thrown.