Модульное тестирование карты Java - PullRequest
14 голосов
/ 27 февраля 2010

Я хотел бы запускать мои приложения Java Card в какой-либо эмулируемой / имитируемой среде, чтобы иметь возможность запускать на них тесты JUnit (или любой другой фреймворк модульных тестов). Кто-нибудь знает такой инструмент? Я бы предпочел какой-нибудь проект с открытым исходным кодом.

Ответы [ 4 ]

10 голосов
/ 23 апреля 2012

Специально для этой цели наша команда разработала jCardSim: JavaCard Simulator с открытым исходным кодом - 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());

Пример юнит-теста: http://code.google.com/p/jcardsim/source/browse/trunk/src/test/java/com/licel/jcardsim/base/SimulatorTest.java

Это полностью эмулирует настоящую NXP-микросхему JavaCard. Попробуйте использовать это. Любые комментарии и идеи приветствуются! Будем благодарны, если вы поделитесь ссылкой на проект!

1 голос
/ 23 августа 2013

Обратите внимание, что один из способов сделать это - создать тесты JUnit в Java SE и использовать APDU для связи с классами в Java Card. Очевидно, что это не то же самое, что прямое тестирование классов в Java Card, но нищие не могут быть выбирающими. В общем, вам нужно создать апплет, который сделает некоторые преобразования для вас. Этот метод используется в ответе jCardSim от Михаила - его, конечно, можно использовать и на реальной карте, но вы потеряете любое покрытие кода и - возможно - параметры отладки.

Другой метод (для которого у меня есть собственное, рабочее решение) - это реализовать модульные тесты на карте и вызывать их из тестовой среды JUnit из Java SE. Это много работы; Я должен был сгенерировать свою собственную реализацию List, чтобы это работало. Это того стоило; это позволило мне использовать определенные в Java Card объекты и типы из Java Card. Насколько я знаю, альтернативы с открытым исходным кодом для этого не существует.

Это может быть возможность добавить тестовую среду JUnit в jCardSim и тестировать классы напрямую, поскольку полная JRE доступна во время компиляции апплета. Обратите внимание, что jCardSim еще не является полностью функционирующей картой Java Card (например, нет сброса памяти, как указано в API, нет поддержки транзакций и т. Д. И т. Д.), Поэтому помните об этом при тестировании кода, специфического для карты Java.

0 голосов
/ 01 апреля 2011

Апплеты Java-карты - это простые фрагменты кода Java. Итак, JUnit в порядке. Проверяйте их так же, как и обычные классы Java.

Но проблема в том, что я никогда не видел реализации java классов в пакетах javacard. * И javacardx. *. Если вы их получите - проблема решена.

Если вы хотите проверить, как работает сам апплет (отправка / получение APDU), значит, в SDK Java Card есть cref.exe. Это эмулятор javacard.

0 голосов
/ 29 ноября 2010

Не знаю Java Card, однако, на первый взгляд, она, кажется, не сильно отличается от любых других платформ JavaME (я имею в виду, сравнивая их с, например, J2SE). В качестве такового вы можете использовать любой обычный, например, JUnit тестовая среда с Eclipse / Netbeans для упрощения разработки. Вам может понадобиться powermock , чтобы высмеивать некоторые вещи, специфичные для платформы. Надеюсь, это поможет.

Один совет для Netbeans: вы можете рассмотреть отдельный проект для тестов (это зависит от вашего проекта приложения). В этом случае вы можете кодировать свои UT с помощью новейших игрушек Java.

...