Как создать функцию, чтобы сказать мне, если оператор вызывает исключение или нет в C # - PullRequest
0 голосов
/ 02 февраля 2011

Я бы хотел, чтобы функция принимала оператор в качестве параметра, либо в виде строки, либо в виде какого-либо другого типа, о котором я не знаю, и возвращала бы значение true, если при выполнении этого оператора генерируется исключение, и значение false в противном случае.

Это может зависеть от некоего «строкового» выполнения, которое я понятия не имею, как это сделать в C #.

Ответы [ 5 ]

4 голосов
/ 02 февраля 2011

На самом деле единственная причина для этого - облегчить тестирование моего кода.

Было бы лучше использовать каркас модульного теста, такой как NUnit или Visual Studio Team Test:

Чтобы сказать, что метод должен выдать исключение, вы добавляете атрибут ExpectedException, например:

[Test]
[ExpectedException(typeof(ArgumentException)]
public void NullUserIdInConstructor()
{
    LogonInfo logonInfo = new LogonInfo(null, "P@ss0word");
}

Если вы не добавите этот атрибут, а метод сгенерирует, тест автоматически завершится неудачей.


Для полноты я также отвечу на вопрос, который вы задали: вы не можете выполнить строку, но можете передать действие в качестве параметра.

bool ThrowsException(Action action)
{
    try
    {
        action();
        return false;
    }
    catch
    {
        return true;
    }
}

Вы можете использовать это так, например:

bool result = ThrowsException(() => { throw new NotImplementedException(); });
1 голос
/ 03 февраля 2011

Если я правильно понимаю, вы хотите что-то вроде этого:

public static bool ActionSucceeds(Action action, out Exception exception)
{
    try 
    {
        action(); 
        exception = null;
        return true;
    }
    catch (Exception ex)
    {
        exception = ex;
        return false;
    }
}
1 голос
/ 02 февраля 2011

Насколько я понимаю, нет способа сделать это.

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

Вам действительно следует добавить исключение к коду, который предположительно предназначен для проверки логического значения вашего метода и обработки его там, где вам нравится.Исключения ... хорошо для обработки исключительных случаев.Это не очень хорошо для попытки вернуть истину или ложь из метода.Это не то, для чего предназначены исключения.Это помещает различные коннотации в ваш метод.

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

Итак, теперь у нас есть лучший контекст для вашего вопроса ...

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

Эти библиотеки предоставляют инфраструктуру, необходимую для запуска тестов и выявления исключений (как ожидаемых, так и не ожидаемых) во время выполнения. Это позволяет запускать весь набор тестов, даже если отдельный тест не пройден. Вы также можете использовать утилиты Assert, предоставленные для проверки условий отказа, вместо непосредственного создания исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...