### Question:
JValidator implements Validator { @Override public void validate(String methodName, Class<?>[] parameterTypes, Object[] arguments) throws Exception { List<Class<?>> groups = new ArrayList<Class<?>>(); Class<?> methodClass = methodClass(methodName); if (methodClass != null) { groups.add(methodClass); } Set<ConstraintViolation<?>> violations = new HashSet<ConstraintViolation<?>>(); Method method = clazz.getMethod(methodName, parameterTypes); Class<?>[] methodClasses = null; if (method.isAnnotationPresent(MethodValidated.class)){ methodClasses = method.getAnnotation(MethodValidated.class).value(); groups.addAll(Arrays.asList(methodClasses)); } groups.add(0, Default.class); groups.add(1, clazz); Class<?>[] classgroups = groups.toArray(new Class[0]); Object parameterBean = getMethodParameterBean(clazz, method, arguments); if (parameterBean != null) { violations.addAll(validator.validate(parameterBean, classgroups )); } for (Object arg : arguments) { validate(violations, arg, classgroups); } if (!violations.isEmpty()) { logger.error("Failed to validate service: " + clazz.getName() + ", method: " + methodName + ", cause: " + violations); throw new ConstraintViolationException("Failed to validate service: " + clazz.getName() + ", method: " + methodName + ", cause: " + violations, violations); } } @SuppressWarnings({"unchecked", "rawtypes"})  JValidator(URL url); @Override void validate(String methodName, Class<?>[] parameterTypes, Object[] arguments);  }### Answer:
@Test public void testItWithNonExistMethod() throws Exception { Assertions.assertThrows(NoSuchMethodException.class, () -> { URL url = URL.valueOf("test: JValidator jValidator = new JValidator(url); jValidator.validate("nonExistingMethod", new Class<?>[]{String.class}, new Object[]{"arg1"}); }); }
@Test public void testItWithExistMethod() throws Exception { URL url = URL.valueOf("test: JValidator jValidator = new JValidator(url); jValidator.validate("someMethod1", new Class<?>[]{String.class}, new Object[]{"anything"}); }
@Test public void testItWhenItViolatedConstraint() throws Exception { Assertions.assertThrows(ConstraintViolationException.class, () -> { URL url = URL.valueOf("test: JValidator jValidator = new JValidator(url); jValidator.validate("someMethod2", new Class<?>[]{ValidationParameter.class}, new Object[]{new ValidationParameter()}); }); }
@Test public void testItWhenItMeetsConstraint() throws Exception { URL url = URL.valueOf("test: JValidator jValidator = new JValidator(url); jValidator.validate("someMethod2", new Class<?>[]{ValidationParameter.class}, new Object[]{new ValidationParameter("NotBeNull")}); }