@Test
 public void testThrowMessageForMessageOnViolation() throws Exception {
   final ParametersPassesExpression annotation =
       proxyAnnotation(
           ParametersPassesExpression.class,
           "value",
           "myExpression",
           "messageOnViolation",
           "My message - ${#expression}");
   final MethodCall<ParametersPassesExpressionUnitTest> methodCall =
       toMethodCall(ParametersPassesExpressionUnitTest.class, this, "test", "a", 1, "b", 2);
   try {
     new Evaluator().throwMessageFor(annotation, methodCall, null);
     fail("Exception missing");
   } catch (IllegalArgumentException e) {
     assertThat(e.getMessage(), is("My message - " + annotation.value()));
     assertThat(e.getCause(), nullValue());
   }
   final Throwable cause = new Throwable("myCause");
   try {
     new Evaluator().throwMessageFor(annotation, methodCall, cause);
     fail("Exception missing");
   } catch (IllegalArgumentException e) {
     assertThat(e.getMessage(), is("My message - " + annotation.value()));
     assertThat(e.getCause(), is(cause));
   }
 }
 @Test
 public void testFormatViolationMessage() throws Exception {
   final ParametersPassesExpression annotation1 =
       proxyAnnotation(
           ParametersPassesExpression.class, "value", "myExpression", "messageOnViolation", "");
   final ParametersPassesExpression annotation2 =
       proxyAnnotation(
           ParametersPassesExpression.class,
           "value",
           "myExpression",
           "messageOnViolation",
           "My message - ${#expression}");
   final MethodCall<ParametersPassesExpressionUnitTest> methodCall =
       toMethodCall(ParametersPassesExpressionUnitTest.class, this, "test", "a", 1, "b", 2);
   assertThat(
       new Evaluator().formatViolationMessage(annotation1, methodCall),
       is("Expression not passed: " + annotation1.value()));
   assertThat(
       new Evaluator().formatViolationMessage(annotation2, methodCall),
       is("My message - " + annotation1.value()));
 }