He estado pensando en crear un marco de trabajo Java que permita a los programadores especificar invariantes (condiciones previas y posteriores) en las interfaces. El objetivo sería hacer que el código sea más robusto y reducir el número de pruebas unitarias que deberían escribirse para diferentes implementaciones de la misma interfaz.Adición de invariantes a interfaces en Java
Imagino crear alguna manera de anotar métodos con invariantes que el programador también escribiría. P.EJ.
interface Sort {
int [] sort(int [] nums);
}
sería adornado con una anotación para asegurar que cualquier implementación devuelven una lista ordenada. Esta anotación estaría vinculada a una prueba unitaria que podría ejecutarse en tiempo de compilación contra cualquier implementación.
¿Es esta una idea loca o sería útil para una comunidad de programación más amplia?
No estoy seguro de si vincularlo con la prueba de unidad es una buena jugada durante el tiempo de compilación. Porque "pasar la prueba es solo algo", si sabes a qué me refiero. Usar un tejedor de aspecto puede ser un mejor enfoque, ¿no? (Entonces la siguiente pregunta será - rendimiento) – yclian
@yclian, creo que la idea era usar estas condiciones previas y posteriores para realizar varios análisis estáticos a fin de reducir el número de pruebas unitarias que tendrían que escribirse en orden para obtener cobertura equivalente No vi ninguna implicación de que esto necesariamente sea una cosa de tiempo de ejecución (aunque tal vez algunas afirmaciones de tiempo de ejecución podrían utilizarse para proteger las declaraciones de que el análisis estático no podría ser seguro). – Gian