Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing Exception Messages with Shouldly

Is there a way to test the exception messages with shouldly?

An example:

public class MyException: Exception{ } 

The method to be tested:

public class ClassUnderTest {     public void DoSomething()      {         throw new MyException("Message");     } } 

I would usually test this in this way:

[TestMethod] public void Test() {     try     {         new ClassUnderTest().DoSomething();         Assert.Fail("Exception not thrown");     } catch(MyException me)     {         Assert.AreEqual("Message", me.Message);     }catch(Exception e)        Assert.Fail("Wrong exception thrown");     } } 

With shouldly I can now test if a exception is thrown:

[TestMethod] public void TestWithShouldly() {     Should.ThrowException<MyException>(() => new ClassUnderTest().DoSomething()); } 

But how can I test the message of the exception?

like image 786
Steffen Avatar asked Nov 11 '16 08:11

Steffen


1 Answers

The Should.Throw() method returns the exception, so you can continue to test if for other things.

For example:

Should.Throw<MyException>(() => new ClassUnderTest().DoSomething())     .Message.ShouldBe("My Custom Message"); 

Or, if you want to do more than just test the message:

MyException ex = Should.Throw<MyException>(() => new ClassUnderTest().DoSomething()); 

You can then do what you like with ex.

Note: Shouldly V2 uses Should.ThrowException<>()

like image 66
Colin Mackay Avatar answered Sep 19 '22 15:09

Colin Mackay