Por frikear un rato. Test de unidad asíncronos

21 views
Skip to first unread message

Alberto Gimeno Brieba

unread,
Nov 8, 2012, 1:13:15 PM11/8/12
to nscod...@googlegroups.com
Buenas,

Para quien no lo sepa estoy creando un servicio para facilitar el desarrollo de aplicaciones móviles: http://backbeam.io

Estoy testeándolo todo lo posible y estoy haciendo SDKs para iOS, Android y Javascript. En iOS todas las llamadas se hacen asíncronamente por bloques. Echando un vistazo a algún framework de testing como no me convencía me he hecho un mini framework yo mismo.

Así es como queda un test:

Así es el "framework" de testing (sólo 96 líneas de código :):
https://github.com/backbeam/BackbeamFramework/blob/master/Backbeam/Test/BBTest.m
Si hay fallo te indica la línea y el fichero de test que ha fallado :)

Lo comparto con vosotros por si os parece interesante y me queréis preguntar algo. Mi intención es ir ampliándolo y quizá implementar un sistema de "reporters" y que haya un reporter que en un ViewController vaya mostrando el éxito o no de los tests. Y el reporter más sencillo mostraría los resultados por consola.

Saludos!

---
Alberto Gimeno Brieba
http://twitter.com/gimenete
http://gimenete.net

Daniel Vela

unread,
Nov 9, 2012, 5:43:57 AM11/9/12
to nscod...@googlegroups.com
Hola Alberto,

¿Hay alguna manera en que te podamos ayudar con tu backbeam? No tengo mucho tiempo, pero me gustaría poder echarte una mano.

Sobre los test, molaría un día que nos comentaras por qué no te han gustado los demás. Cuando quedemos con unas birras.

Saludos,
--

Saludos,
Daniel Vela

Alberto Gimeno Brieba

unread,
Nov 9, 2012, 12:37:22 PM11/9/12
to nscod...@googlegroups.com
Buenas,

Gracias por tu ofrecimiento :) La mejor manera en la que me podéis ayudar es probándolo. Para el que no lo sepa backbeam.io es un producto que estoy desarrollando para facilitar la creación de aplicaciones móviles. Te resuelve toda la parte de backend: base de datos, webservice, notificaciones push, estadísticas, notificaciones por email (mail de bienvenida, "he olvidado mi contraseña", validación de email), login con twitter y facebook, etc.

Como comento ahora mismo está en desarrollo y sigue en beta. Puede haber cambios y alguna cosa que no termine de funcionar bien, pero cada semana es más funcional y más estable :) Por ejemplo acabo de hacer un push importante en el SDK para iOS. En los propios test podéis ver cómo se hacen consultas a la base de datos, se registran usuarios, se mandan notificaciones push,…


Si os animáis a hacer pruebas con backbeam.io me tenéis fácilmente accesible para daros soporte :)

Saludos!
2012/11/9 Daniel Vela <vel...@gmail.com>

David Olmos

unread,
Nov 9, 2012, 3:42:54 PM11/9/12
to nscod...@googlegroups.com
Tiene muy buena pinta Alberto!, me gustaría poder sacar un rato para trastear con el y poder darte algo de feedback, porque me parece espectacular el currazo que te estas pegando!. Eso si, prepárate, porque en cuanto lo toquetee un rato seguro que luego te frío a preguntas! :P

Alberto Gimeno Brieba

unread,
Nov 12, 2012, 5:17:13 AM11/12/12
to nscod...@googlegroups.com
Por mi parte encantado de que me hagáis todas las preguntas que necesitéis resolver :) De momento la documentación es bastante escasa, así que es completamente normal que tengáis muchas :P

Spoiler: en no mucho tiempo añadiré soporte también para hacer webs hosteadas en backbeam.

Super spoiler: también añadiré en un futuro un marketplace con intención de que los developers hagan aplicaciones marca blanca y puedan vender el código. Por ejemplo un programador hace una aplicación de turismo de una ciudad (con eventos, lugares, comentarios, valoraciones,…) usando backbeam.io. En vez de hacerla concreta de una ciudad y subirla a la Apple Store, podría "publicarla" en el marketplace y que otros developers / empresas compraran el código fuente para que con mínimos cambios aplicaran su identidad corporativa. El marketplace se encargará de crear un proyecto nuevo en backbeam clonando el modelo de la base de datos.
2012/11/9 David Olmos <olmos...@gmail.com>

Alberto Gimeno Brieba

unread,
Nov 22, 2012, 11:44:59 AM11/22/12
to nscod...@googlegroups.com
Buenas,

Sobre lo de los tests de unidad, por qué no me convencía ninguna solución. Es porque los que he visto, para soportar el asincronismo, hacen lo siguiente:

- (BOOL)waitForCompletion:(NSTimeInterval)timeoutSecs {
    NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeoutSecs];
 
    do {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:timeoutDate];
        if([timeoutDate timeIntervalSinceNow] < 0.0)
            break;
    } while (!done);
 
    return done;
}


Lo cual me parece una chapuza. Inspirado en mocha, el framework que uso para nodejs, la solución mía pasa por pasar un bloque (función callback en mocha) que tú tienes que llamar para decir cuándo has terminado. Y ese bloque lo puedes llamar desde donde quieras. Desde dentro de otro bloque que se ejecutará asíncronamente por ejemplo. Es decir… (en pseudocódigo)

funcion test(done) {

    hacerAlgoAsíncrono(parametros, {
        // una vez terminado
        done(); // le indica al framework que el test ha terminado, y que ejecute los siguientes tests si hay
    })

}
2012/11/12 Alberto Gimeno Brieba <gime...@gmail.com>
Reply all
Reply to author
Forward
0 new messages