Для начала я понял, что, возможно, есть лучший способ сделать это, и вместо того, чтобы выдавать исключение, я должен просто лучше обработать условие.При этом я столкнулся с неожиданным поведением, и мне более любопытно, почему это происходит, чем при использовании моего приложения.
В методе я пытаюсь получить доступ к файлу, предоставленному пользователем.В начале метода я проверяю, чтобы убедиться, что путь к файлу не Null
или String.Empty
, и выбрасываю исключение, если оно есть.Когда я проводил тестирование, я обнаружил, что исключение выдается независимо от состояния.Это нормальное поведение, или я что-то упустил?
public static XElement Foo(String path)
{
if (String.IsNullOrEmpty(path))
{
throw new ArgumentNullException(); // this exception is thrown
// regardless of the value of 'path'
}
// code to open and parse file
// returns XElement
}
ОБНОВЛЕНИЕ:
В моем тестовом сценарии вызывающий метод просто отправляет путь по умолчанию, который я жестко запрограммировал для теста.Я не завершил пользовательский интерфейс, поэтому код для определения пользователем пути не завершен.
private const string c_fooPath = "C:\\test\\text.txt"
public void CallingFoo()
{
var xml = Foo(c_fooPath)
// some code
}
ОБНОВЛЕНИЕ № 2:
Просто упомянуть некоторые другие мои тесты, которые у меня естьпытался.Я пытался
if (String.IsNullOrEmpty(path))
{
Console.WriteLine("testing") // this line is skipped when my condition is
// false but runs when i force it to be true
throw new ArgumentNullException(); // this exception is thrown
// regardless of the value of 'path'
}
if (false)
{
throw new ArgumentNullException(); // the exception is not thrown here - the only
// condition i have found so far.
}
public static XElement Foo(String path)
{
path = "test";
if (String.IsNullOrEmpty(path))
{
throw new ArgumentNullException(); // exception is still thrown
}
// code to open and parse file
// returns XElement
}