Exceção no MS Unit Test?
-
28-10-2019 - |
Pergunta
Criei um teste de unidade para um método do meu projeto.Esse método gera uma exceção quando um arquivo não é encontrado.Eu escrevi um teste de unidade para isso, mas ainda não consigo passar no teste quando a exceção é levantada.
O método é
public string[] GetBuildMachineNames(string path)
{
string[] machineNames = null;
XDocument doc = XDocument.Load(path);
foreach (XElement child in doc.Root.Elements("buildMachines"))
{
int i = 0;
XAttribute attribute = child.Attribute("machine");
machineNames[i] = attribute.Value;
}
return machineNames;
}
Teste de Unidade
[TestMethod]
[DeploymentItem("TestData\\BuildMachineNoNames.xml")]
[ExpectedException(typeof(FileNotFoundException),"Raise exception when file not found")]
public void VerifyBuildMachineNamesIfFileNotPresent()
{
var configReaderNoFile = new ConfigReader();
var names = configReaderNoFile.GetBuildMachineNames("BuildMachineNoNames.xml");
}
Devo lidar com a exceção no método ou estou faltando alguma outra coisa ??
EDITAR:
O caminho que estou passando não é aquele para encontrar o arquivo, então este teste deve passar ... ou seja, e se o arquivo não existir nesse caminho.
Solução
Em seu teste de unidade, parece que você está implantando um arquivo xml: TestData\BuildMachineNoNames.xml
, que você está passando para GetBuildMachineNames
.Portanto, o arquivo existe e você não pode esperar que um FileNotFoundException
seja lançado.Então, talvez assim:
[TestMethod]
[ExpectedException(typeof(FileNotFoundException), "Raise exception when file not found")]
public void VerifyBuildMachineNamesIfFileNotPresent()
{
var configReaderNoFile = new ConfigReader();
var names = configReaderNoFile.GetBuildMachineNames("unexistent.xml");
}
Outras dicas
Ao colocar o atributo [ExpectedException (typeof (FileNotFoundException), "Gerar exceção quando o arquivo não for encontrado")], você espera que o método lance um FileNotFoundException, se o FileNotFoundException não lançado Teste falhar.Caso contrário, o teste será um sucesso.
Eu nunca entendi realmente o ponto de ExpectedException
.Você deve ser capaz de capturar a exceção no código em vez de nos atributos.É uma prática melhor e também permite que você faça coisas depois que ele for gerado (por exemplo, mais validações) ... Também permitiria que você parasse o código no depurador e verifique as coisas ao invés de precisar perguntar em fóruns.:)
Eu usaria Assert.Throws (código TestDelegate) ;.
Veja aqui um exemplo .