martes, 17 de noviembre de 2009

Testear todos los paneles wicket

Bueno primero que nada, no es mi idea, solo lo traduzco y adapte a mi codigo.

Original : http://stuq.nl/weblog/2009-11-01/automatically-test-your-wicket-panel-html-markup


La idea es de testear todos los componentes Panel (se puede hacer para mas cosas) por reflection, gracias a spring.
Intente dejarlo lindo con labdaj pero no me salio =( , quedaba inentendible, Cuando tenga mas practica con eso, probamos

Con esto, si en un panel no cerramos un tag (ej <div bla </div> ) el unit test fallaria donde lo encuentre, lo mismo con los errores comunes de cambiar un wicket:id o algo asi

bueno, dependencias solo junit y spring






package base2dev.web.panel;

import java.lang.reflect.Constructor;
import java.util.Set;
import org.apache.wicket.markup.html.panel.Panel;
import org.junit.Test;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.AssignableTypeFilter;
import base2dev.web.common.test.TestCase;

public class PanelsTest extends TestCase {

@Test
public void testAllWicketPanels() throws Exception {

//cosas de spring
ClassPathScanningCandidateComponentProvider provider =
new ClassPathScanningCandidateComponentProvider(true);

//seteo como filtro las cosas del tipo Panel
provider.addIncludeFilter(new AssignableTypeFilter(Panel.class));

//path donde buscar
Set<BeanDefinition> components = provider
.findCandidateComponents("base2dev/web/common/controls");


//esto podria ser mas lindo con labdaj
// llamamos a testear el panel, por cada componente, nada muy loco
for (BeanDefinition component : components) {
Class clazz = Class.forName(component.getBeanClassName());
if (hasDefaultConstructor(clazz)) {
testWicketPanel(clazz);
}
}
}

public void testWicketPanel(Class clazz) {
getTesterApplication().startPanel(clazz);
getTesterApplication().assertNoErrorMessage();
getTesterApplication().assertNoInfoMessage();
}

public boolean hasDefaultConstructor(Class clazz) {
for (Constructor constructor : clazz.getConstructors()) {
if (constructor.getParameterTypes().length == 1
&& constructor.getParameterTypes()[0].getSimpleName()
.equals("String")) {
return true;
}
}

return false;
}
}
-----------------------------------------------





Powered by ScribeFire.

No hay comentarios.: