Исключение в модульном тесте MS? - PullRequest
4 голосов
/ 04 февраля 2011

Я создал модульный тест для метода моего проекта.Этот метод вызывает исключение, когда файл не найден.Я написал для этого модульный тест, но я все еще не могу пройти тест, когда возбуждается исключение.

Метод

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;
}

Модульный тест

[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");
}

Должен ли я обработать исключение в методе или я что-то упускаю?

РЕДАКТИРОВАТЬ:

Путь, который я прохожуэто не тот, кто находит файл, поэтому этот тест должен пройти ... то есть, если файл не существует по этому пути.

Ответы [ 3 ]

6 голосов
/ 04 февраля 2011

В вашем модульном тесте кажется, что вы развертываете XML-файл: TestData\BuildMachineNoNames.xml, который вы передаете GetBuildMachineNames.Таким образом, файл существует, и вы не можете ожидать выброс FileNotFoundException.Так может быть так:

[TestMethod]
[ExpectedException(typeof(FileNotFoundException), "Raise exception when file not found")]
public void VerifyBuildMachineNamesIfFileNotPresent()
{
    var configReaderNoFile = new ConfigReader();
    var names = configReaderNoFile.GetBuildMachineNames("unexistent.xml");
}
1 голос
/ 04 февраля 2011

При установке атрибута [ExpectedException (typeof (FileNotFoundException), «Возбудить исключение, когда файл не найден»)] вы ожидаете, что метод сгенерирует исключение FileNotFoundException, если тест FileNotFoundException, не брошенный, завершится неудачей.В противном случае тест будет успешным.

0 голосов
/ 05 февраля 2011

Я никогда не понимал смысл ExpectedException. Вы должны быть в состоянии отловить исключение в коде, а не в атрибутах. Это лучшая практика, и она также позволяет вам делать вещи после того, как они были подняты (например, больше проверок) ... Также это позволит вам остановить код в отладчике и проверить вещи, а не спрашивать их на форумах. :)

Я бы использовал Assert.Throws (код TestDelegate);.
См. здесь пример .

...