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.

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top