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

Reply via email to