2010-02-27 18 views
13

Me gustaría ejecutar mis aplicaciones Java Card en algún tipo de entorno emulado/simulado para poder ejecutar pruebas JUnit (o cualquier otro framework de pruebas unitarias) en ellas. ¿Alguien sabe de una herramienta así? Prefiero algún proyecto de código abierto.Java Card Unit Testing

+1

En caso de que alguien no sepa a qué se refiere la "Java Card": http://java.sun.com/javacard/ – MatrixFrog

Respuesta

0

No conozco la Java Card, sin embargo, a primera vista, no parece muy diferente a cualquier otra plataforma JavaME (me refiero a compararla con J2SE por ejemplo). Como tal, puede usar cualquier ordinaria, p. JUnit entorno de prueba con Eclipse/Netbeans para facilitar el desarrollo. Es posible que necesite powermock para burlarse de algunas cosas específicas de la plataforma. Espero que esto ayude.

Un consejo para Netbeans: puede considerar un proyecto separado para las pruebas (eso depende de su proyecto de aplicación). En ese caso, puede tener sus UT codificados con la potencia de los últimos juguetes de Java.

0

Los applets de Java son simples piezas de código Java. Entonces, JUnit está bien. Pruébalos como si pruebas clases regulares de Java.

Pero el problema es que nunca vi implementaciones java de clases en paquetes javacard. * Y javacardx. *. Si los obtendrá, el problema está resuelto.

Si desea probar cómo funciona el applet en sí mismo (envío/recepción de APDU), entonces hay cref.exe en el Java Card SDK. Es un emulador de javacard.

+2

Esto puede ser ligeramente posible ahora con jCardSim, pero generalmente necesita un Java Card Runtime Environment (incluida Java Card VM) para ejecutar el código de la tarjeta Java.Java Card SDK solo tiene un conjunto mínimo de API implementadas (sin crypto por ejemplo) por lo que es de uso mínimo, y no se pueden ejecutar pruebas unitarias en ellas. –

10

Especial para este propósito nuestro equipo desarrolló jCardSim: JavaCard Simulator de código abierto - http://code.google.com/p/jcardsim/.

//1. create simulator 
Simulator simulator = new Simulator(); 
//2. install applet 
simulator.installApplet(appletAID, HelloWorldApplet.class); 
//3. select applet 
simulator.selectApplet(appletAID); 
//4. send apdu 
ResponseAPDU response = simulator.transmitCommand(new CommandAPDU(0x01, 0x01, 0x00, 0x00)); 
//5. check response 
assertEquals(0x9000, response.getSW()); 

ejemplo la prueba de unidad: http://code.google.com/p/jcardsim/source/browse/trunk/src/test/java/com/licel/jcardsim/base/SimulatorTest.java

Se emular completamente el verdadero JavaCard NXP-chip. Intenta usarlo. ¡Todos los comentarios e ideas son bienvenidos! ¡Le agradeceremos que comparta el enlace al proyecto!

+1

Creo que jCardSim es un proyecto muy interesante (y trataré de contribuir) pero decir que ya es capaz de emular completamente "el verdadero chip NXP" es llevarlo demasiado lejos. La gestión de la memoria, soporte de transacciones, bibliotecas propietarias, soporte de protocolos múltiples, longitud extendida, etc. aún faltan. –

1

Tenga en cuenta que un método para hacerlo es crear pruebas JUnit en Java SE, y utilizar APDU para comunicarse con las clases en Java Card. Obviamente, esto no es lo mismo que probar directamente clases en Java Card, pero los mendigos no pueden ser selectivos. En general, necesitaría crear un Applet que haga algunas conversiones por usted. Este es el método que se usa en el jCardSim answer from Mikhail; podría, por supuesto, usarse en una tarjeta real también, pero perdería cualquier cobertura de código y, posiblemente, opciones de depuración.

Otro método (para el que tengo una solución propietaria de trabajo) es implementar pruebas unitarias en la tarjeta y llamarlas desde un marco de prueba JUnit desde Java SE. Esto es un montón de trabajo; Tuve que generar mi propia implementación List para que esto funcione. Sin embargo, valió la pena; me permitió usar objetos y tipos definidos por Java Card desde Java Card. No hay alternativa de código abierto para esto hasta donde yo sé.

Podría ser una opción agregar un marco de prueba JUnit a jCardSim y probar clases directamente, ya que el JRE completo está disponible durante la compilación del Applet. Tenga en cuenta que jCardSim aún no es una tarjeta Java totalmente funcional (por ejemplo, no se reinicia la memoria como se especifica en la API, no admite transacciones, etc.), así que tenga esto en cuenta al probar el código específico de la tarjeta Java.