Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Propriedade | Valor |
|---|---|
| ID da regra | MSTEST0062 |
| Título | Evitar os parâmetros de out e ref nos métodos de teste |
| Categoria | Usage |
| A correção é invasiva ou não invasiva | Non-breaking |
| Ativado por padrão | Yes |
| Severidade padrão | Advertência |
| Introduzido na versão | 4.1.0 |
| Existe uma correção de código | Yes |
Motivo
Um método de teste tem parâmetros marcados com out ou ref modificadores.
Descrição da regra
Os métodos de teste não devem ter out ou ref parâmetros. O MSTest é responsável por chamar métodos de teste e nunca lê os valores que são passados por referência após o término do método de teste. Estes modificadores são enganadores porque sugerem que o método de teste devolve valores que serão usados, mas o MSTest nunca os utiliza após a conclusão do teste.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod(out string s, ref string s2) // Violation
{
s = "test";
}
}
Como corrigir violações
Remova os modificadores out e ref dos parâmetros do método de teste.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
// Test code
}
}
Se precisar de testar métodos com out ou ref parâmetros, chame-os a partir do seu método de teste:
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethodWithOutParameter()
{
// Arrange
string result;
string passedByRef = "some value";
var instance = new MyClass();
// Act
bool success = instance.TryGetValue(out result, ref passedByRef);
// Assert
Assert.IsTrue(success);
Assert.AreEqual("expected", result);
}
}
Para testes orientados por dados:
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow("input1", "expected1")]
[DataRow("input2", "expected2")]
public void TestMethod(string input, string expected)
{
// Arrange
string result;
var instance = new MyClass();
// Act
bool success = instance.TryParse(input, out result);
// Assert
Assert.IsTrue(success);
Assert.AreEqual(expected, result);
}
}
Quando suprimir avisos
Não suprima avisos desta regra. Não existe um cenário válido onde os métodos de teste devam usar parâmetros out ou ref.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable MSTEST0062
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0062
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0062.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.