MSTEST0006: Evitare [ExpectedException]
Proprietà | valore |
---|---|
ID regola | MSTEST0006 |
Title | Evitare [ExpectedException] |
Categoria | Progettazione |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitata per impostazione predefinita | Sì |
Gravità predefinita | Info |
Introdotto nella versione | 3.2.0 |
È presente una correzione del codice | Sì, a partire dalla versione 3.7.0 |
Causa
Un metodo è contrassegnato con l'attributo [ExpectedException]
.
Descrizione regola
Preferire Assert.ThrowsException
o Assert.ThrowsExceptionAsync
(o Assert.ThrowsExactly
/Assert.Throws
o Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
se si usa MSTest 3.8 e versioni successive) sull'attributo [ExpectedException]
perché garantisce che solo la riga di codice prevista generi l'eccezione prevista, anziché agire sull'intero corpo del test. Le API assert offrono anche maggiore flessibilità e consentono di asserire proprietà aggiuntive dell'eccezione.
[TestClass]
public class TestClass
{
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))] // Violation
public void TestMethod()
{
// Arrange
var person = new Person
{
FirstName = "John",
LastName = "Doe",
};
person.SetAge(-1);
// Act
person.GrowOlder();
}
}
Come correggere le violazioni
Sostituire l'utilizzo dell'attributo [ExpectedException]
tramite una chiamata a Assert.ThrowsException
o Assert.ThrowsExceptionAsync
(o Assert.ThrowsExactly
/Assert.Throws
o Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
se si usa MSTest 3.8 e versioni successive).
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
// Arrange
var person = new Person
{
FirstName = "John",
LastName = "Doe",
};
person.SetAge(-1);
// Act
Assert.ThrowsExactly(() => person.GrowOlder());
}
}
Quando eliminare gli avvisi
È sicuro eliminare questa diagnostica quando il metodo di una sola riga.
[TestClass]
public class TestClass
{
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestMethod()
{
new Person(null);
}
}