Actualmente estoy desarrollando un pequeño proyecto mío que genera llamadas SQL de una manera dinámica para ser utilizado por otro software. Las llamadas SQL no se conocen de antemano y, por lo tanto, me gustaría poder probar el objeto que genera el SQL.¿Cómo pruebo una herramienta de generación de código?
¿Tiene alguna idea de cómo sería el mejor enfoque para hacer esto? Tenga en cuenta que no existe una forma posible de conocer todas las posibles llamadas SQL que se generarán.
Actualmente, la única idea que tengo es crear casos de prueba del SQL aceptado de la base de datos usando regex y asegurarme de que SQL se compilará, pero esto no garantiza que la llamada devuelva el resultado esperado.
Editado: la adición de más información:
Mi proyecto es una extensión de Boo que permitirá a los desarrolladores a etiquetar sus propiedades con un conjunto de atributos. Estos atributos se utilizan para identificar cómo los desarrolladores quieren almacenar el objeto en el DB. Por ejemplo:
# This attribute tells the Boo compiler extension that you want to
# store the object in a MySQL db. The boo compiler extension will make sure that you meet
# the requirements
[Storable(MySQL)]
class MyObject():
# Tells the compiler that name is the PK
[PrimaryKey(Size = 25)]
[Property(Name)]
private name as String
[TableColumn(Size = 25)]
[Property(Surname)]
private surname as String
[TableColumn()]
[Property(Age)]
private age as int
La gran idea es que el código generado no necesitará utilizar la reflexión, pero que será agregado a la clase en tiempo de compilación. Sí, la compilación llevará más tiempo, pero no será necesario usar Reflection en absoluto. Actualmente tengo el código funcionando generando los métodos necesarios que devuelve el SQL en tiempo de compilación, se agregan al objeto y se pueden llamar, pero necesito probar que el SQL generado es correcto: P
Desafortunadamente el código no se puede leer porque nunca se escribe, se agrega en el T de análisis utilizado por boo al compilar, y por lo tanto no se puede leer para que no sea posible leerlo y revisarlo :( – mandel
No se puede agregar un paso intermedio donde el código se escribe en un archivo o algo así? –
Sí, pero ¿eso significa que tengo que leer la salida para asegurarme de que funciona? Un poco horrible, ¿no? – mandel