Well I've managed to create something that tests annotation based validations but it isn't pretty! This does not work for ModelDriven actions as it falls over with the VisitorFieldValidator not having a config.
Here's an example. First we have the Action to test and then the Unit Test with all the boiler plate code required to get a functioning AnnotationActionValidatorManager ------------------------------------ public class TestAction extends ActionSupport { String name; public String execute() { return Action.SUCCESS; } public String getName() { return name; } @RequiredStringValidator(message = "Please specify name") public void setName(String name) { this.name = name; } } -------------------------------------- public class DevelopmentTest { @Test public void shouldTestAnnotationBasedValidation() throws ValidationException, ClassNotFoundException, IllegalAccessException, InstantiationException { //Validation Manager AnnotationActionValidatorManager avm = createAnnotationActionValidatorManager(); TestAction action = new TestAction(); avm.validate(action, ""); assertTrue(action.getFieldErrors().size() == 1); assertEquals("Please specify name",(action.getFieldErrors().get("name").get(0)) ); } private AnnotationActionValidatorManager createAnnotationActionValidatorManager() throws ClassNotFoundException { Container container = this.createBootstrapContainer(); ActionContext context = new ActionContext(new HashMap<String, Object>()); context.setValueStack(createValueStack(container)); ActionContext.setContext(context); OgnlReflectionProvider reflectionProvider = new OgnlReflectionProvider(); reflectionProvider.setOgnlUtil(container.getInstance(OgnlUtil.class)); ObjectFactory objectFactory = new ObjectFactory(); objectFactory.setReflectionProvider(reflectionProvider); DefaultValidatorFileParser fileParser = new DefaultValidatorFileParser(); fileParser.setObjectFactory(objectFactory); DefaultValidatorFactory validatorFactory = new DefaultValidatorFactory(objectFactory, fileParser); AnnotationActionValidatorManager avm = new AnnotationActionValidatorManager(); avm.setValidatorFactory(validatorFactory); avm.setValidatorFileParser(fileParser); return avm; } private ValueStack createValueStack(Container container) throws ClassNotFoundException { OgnlValueStackFactory stackFactory = new OgnlValueStackFactory(); stackFactory.setXWorkConverter(container.getInstance(XWorkConverter.class)); stackFactory.setContainer(container); stackFactory.setTextProvider(container.getInstance(TextProvider.class)); ValueStack stack = stackFactory.createValueStack(); return stack; } private Container createBootstrapContainer() { ContainerBuilder builder = new ContainerBuilder(); builder.factory(ObjectFactory.class, Scope.SINGLETON); builder.factory(ReflectionProvider.class, OgnlReflectionProvider.class, Scope.SINGLETON); builder.factory(ValueStackFactory.class, OgnlValueStackFactory.class, Scope.SINGLETON); builder.factory(XWorkConverter.class, Scope.SINGLETON); builder.factory(XWorkBasicConverter.class, Scope.SINGLETON); builder.factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON); builder.factory(ObjectTypeDeterminer.class, DefaultObjectTypeDeterminer.class, Scope.SINGLETON); builder.factory(PropertyAccessor.class, CompoundRoot.class.getName(), CompoundRootAccessor.class, Scope.SINGLETON); builder.factory(OgnlUtil.class, Scope.SINGLETON); builder.constant("devMode", "false"); return builder.create(true); } } ------------------------ -- View this message in context: http://www.nabble.com/Unit-Testing-Actions-with-Annotation-based-validation-in-Struts-2.1.6-tp25800676p25819122.html Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org