/// <exception cref="System.Exception"/>
            public override void Evaluate()
            {
                TestException testExceptionAnnotation = frameworkMethod.GetAnnotation <TestException
                                                                                       >();

                try
                {
                    statement.Evaluate();
                    if (testExceptionAnnotation != null)
                    {
                        Type klass = testExceptionAnnotation.Exception();
                        NUnit.Framework.Assert.Fail("Expected Exception: " + klass.Name);
                    }
                }
                catch (Exception ex)
                {
                    if (testExceptionAnnotation != null)
                    {
                        Type klass = testExceptionAnnotation.Exception();
                        if (klass.IsInstanceOfType(ex))
                        {
                            string          regExp  = testExceptionAnnotation.MsgRegExp();
                            Sharpen.Pattern pattern = Sharpen.Pattern.Compile(regExp);
                            if (!pattern.Matcher(ex.Message).Find())
                            {
                                NUnit.Framework.Assert.Fail("Expected Exception Message pattern: " + regExp + " got message: "
                                                            + ex.Message);
                            }
                        }
                        else
                        {
                            NUnit.Framework.Assert.Fail("Expected Exception: " + klass.Name + " got: " + ex.GetType
                                                            ().Name);
                        }
                    }
                    else
                    {
                        throw;
                    }
                }
            }