how to create a function to tell me if a statement throws an exception or not in c#

159 views Asked by At

I'd like to have a function take a statement as a parameter, either as a string or as some other type that I'm not aware of, and return true if the execution of that statement throws an exception, and false otherwise.

This may rely on some sort of "string" execution, which I have no idea how to do in C#.

5

There are 5 answers

2
Mark Byers On BEST ANSWER

Really the only reason for this is to make it easier to test my code.

It would be better to use a unit test framework, such as NUnit, or Visual Studio Team Test:

To say that a method should throw an exception you add the ExpectedException attribute, for example:

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

If you don't add this attribute and the method throws then the test automatically fails.


For completeness I'll also answer the question you asked: you can't execute a string but you can pass an Action as a parameter.

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

You can use it like this, for example:

bool result = ThrowsException(() => { throw new NotImplementedException(); });
0
Jonathan Wood On

As far as I'm concerned, there is no way to do this.

3
ChaosPandion On

If I am understanding this correctly you want something like this:

public static bool ActionSucceeds(Action action, out Exception exception)
{
    try 
    {
        action(); 
        exception = null;
        return true;
    }
    catch (Exception ex)
    {
        exception = ex;
        return false;
    }
}
0
LBushkin On

So now that we have a better context for your question...

I would suggest that for writing tests that can capture and respond to exceptions, you consider using an existing test framework, like NUnit, or MSTest.

These libraries provide the infrastructure necessary to run tests and catch exceptions (both expected and not expected) during execution. This allows an entire suite of tests to run, even if individual test fail. You can also use the Assert utilities provided to help test for failure conditions, rather than throwing exception directly.

0
dexter On

You should really bubble up the exception to the code that supposedly is meant to check for the boolean value of your method in question and handle it there they way you like. Exceptions are... well for handling exceptional cases. It does not translate well into trying to return true or false from a method. Thats not what exceptions are designed to do. It puts a different connatations to your method.