PropertyDescriptorTester
El PropertyDescriptorTester en webforJ simplifica las pruebas para componentes web de terceros integrados en tu aplicación. Valida que las propiedades definidas con PropertyDescriptor estén correctamente vinculadas a sus métodos getter y setter y asegura que los comportamientos predeterminados se manejen de manera consistente. Esta herramienta es especialmente útil para verificar la funcionalidad de las propiedades expuestas por componentes de terceros sin requerir lógica de prueba repetitiva.
Overview
Al trabajar con componentes web de terceros, asegurar que las propiedades se comporten como se espera es esencial. El PropertyDescriptorTester automatiza este proceso validando que las propiedades:
- Estén correctamente mapeadas a sus métodos getter y setter.
- Mantengan valores predeterminados esperados y comportamientos personalizados.
- Eviten problemas comunes de integración, como nombres de propiedades desajustados o valores predeterminados inconsistentes.
La herramienta admite anotaciones para casos de uso más complejos, como excluir propiedades irrelevantes o definir métodos getter y setter personalizados, lo que la convierte en una opción versátil para pruebas de integración.
Cómo funciona PropertyDescriptorTester
El proceso de prueba implica varios pasos automatizados:
-
Escaneo de Clases: El
PropertyDescriptorScanneridentifica todos los campos dePropertyDescriptordentro de una clase de componente, excluyendo automáticamente los campos anotados con@PropertyExclude. -
Resolución de Métodos: Se detectan métodos getter y setter estándar basados en convenciones de nomenclatura (
get<PropertyName>/set<PropertyName>). Para implementaciones no estándar, anotaciones como@PropertyMethodsespecifican nombres de métodos personalizados o clases objetivo. -
Validación: Los valores predeterminados se asignan utilizando el método setter, se recuperan mediante el getter y se comparan para asegurar su corrección. Cualquier desajuste provoca un
AssertionError, destacando el problema específico. -
Informes de Error: El tester proporciona comentarios detallados sobre cualquier fallo de validación, como métodos faltantes, valores predeterminados inconsistentes o configuraciones incorrectas de propiedades.
Escribiendo pruebas con PropertyDescriptorTester
Aquí hay un ejemplo que demuestra la validación básica de propiedades para un componente AppLayout:
Ejemplo: Validación básica
public class MyComponent extends ElementCompositeContainer {
private final PropertyDescriptor<Boolean> drawerOpened =
PropertyDescriptor.property("drawerOpened", false);
private final PropertyDescriptor<String> headerTitle =
PropertyDescriptor.property("headerTitle", "Título Predeterminado");
// setters y getters
}
Caso de prueba
import com.webforj.component.element.PropertyDescriptorTester;
import org.junit.jupiter.api.Test;
class MyComponentTest {
MyComponent component = new MyComponent();
@Test
void validateProperties() {
try {
PropertyDescriptorTester.run(MyComponent.class, component);
} catch (Exception e) {
fail("Prueba PropertyDescriptor falló: " + e.getMessage());
}
}
}
Esta prueba verifica automáticamente:
- Que
drawerOpenedtenga métodos getter y setter válidos. - Que
headerTitletenga como valor predeterminado"Título Predeterminado".
Casos de uso avanzados con anotaciones
Para escenarios más complejos, PropertyDescriptorTester admite anotaciones para personalizar o excluir propiedades de las pruebas.
Excluir propiedades con @PropertyExclude
Excluye propiedades que dependen de sistemas externos o que no son relevantes para la prueba. Por ejemplo:
@PropertyExclude
private final PropertyDescriptor<String> excludedProperty =
PropertyDescriptor.property("excludedProperty", "Excluido");
Personalizar métodos con @PropertyMethods
Define un getter, setter o clase objetivo personalizada cuando las convenciones de nomenclatura predeterminadas no se aplican:
@PropertyMethods(getter = "retrieveValue", setter = "updateValue", target = InnerClass.class)
private final PropertyDescriptor<String> customProperty =
PropertyDescriptor.property("customProperty", "Valor Predeterminado");