Я хотел бы запустить приложения Java Card в какой-то эмулируемой/смоделированной среде, чтобы иметь возможность запускать тесты JUnit (или любой другой модульной тестовой среды). Кто-нибудь знает о таком инструменте? Я бы предпочел какой-то проект с открытым исходным кодом.Тестирование модуля Java-карты
ответ
Не знаю, Java Card, однако, на первый взгляд, он не сильно отличается от любых других платформ JavaME (разными значениями я имею в виду сравнение их с J2SE). Таким образом, вы можете использовать любые обычные, например, JUnit тестовая среда с Eclipse/Netbeans, чтобы сделать разработку немного проще. Вам может понадобиться powermock, чтобы высмеять некоторые специфические для платформы вещи. Надеюсь это поможет.
Один совет для Netbeans: вы можете рассмотреть отдельный проект для тестов (который зависит от вашего проекта приложения). В этом случае вы можете кодировать UT с использованием новейших Java-игрушек.
Java-апплеты Java - это простые кусочки кода Java. Итак, Юнит в порядке. Протестируйте их, как вы тестируете обычные классы Java.
Но проблема в том, что я никогда не видел java-реализации классов в javacard. * И javacardx. * Packages. Если вы их получите - проблема решена.
Если вы хотите проверить, как работает апплет (APDU send/receive), то в SDK карты Java есть cref.exe. Это эмулятор javacard.
Теперь это может быть немного возможно с помощью jCardSim, но в целом вам нужна среда выполнения Java Card Runtime Environment (включая Java Card VM) для запуска кода Java Card.SDK Java Card имеет очень минимальный набор реализованных API (например, криптова), поэтому он минимально подходит, и вы не можете напрямую запускать на них тесты Unit. –
Специально для этой цели наша команда разработала jCardSim: open-source 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());
Unit-тест пример: http://code.google.com/p/jcardsim/source/browse/trunk/src/test/java/com/licel/jcardsim/base/SimulatorTest.java
Это полностью эмулировать реальный JavaCard NXP-чип. Попробуйте использовать его. Любые комментарии и идеи приветствуются! Мы будем благодарны, если вы поделитесь ссылкой на проект!
Я думаю, что jCardSim - очень интересный проект (и я постараюсь внести свой вклад), но, чтобы сказать, что он уже способен полностью эмулировать «настоящий NXP-чип», заходит слишком далеко. Управление памятью, поддержка транзакций, запатентованные библиотеки, поддержка нескольких протоколов, расширенная длина и т. Д. Все еще отсутствуют. –
Обратите внимание, что один из способов сделать это - создать тесты JUnit в Java SE и использовать APDU для связи с классами на Java-карте. Очевидно, это не то же самое, что непосредственно тестировать классы в Java Card, но нищие не могут быть выборами. В общем, вам нужно будет создать апплет, который сделает некоторые преобразования для вас. Это метод, который используется в jCardSim answer from Mikhail - его также можно было бы использовать и на реальной карте, но вы потеряли бы покрытие кода и, возможно, варианты отладки.
Другим методом (для которого я разработал собственное рабочее решение) является выполнение модульных тестов на карте и их вызов из тестовой среды JUnit с Java SE. Это много работы; Для этого мне пришлось создать свою собственную реализацию List
. Это стоило того; он позволяет использовать Java-карты определенных объектов и типов изнутри Java-карты. Насколько мне известно, альтернативы с открытым исходным кодом для этого нет.
Это может быть возможность добавить среду тестирования JUnit к jCardSim и непосредственно тестировать классы, так как полная JRE доступна во время компиляции апплета. Обратите внимание, что jCardSim еще не полностью функционирует на Java-карте (например, без сброса памяти, как указано в API, без поддержки транзакций и т. Д.), Поэтому имейте это в виду при тестировании конкретного кода Java Card.
В случае, если кто-либо не знает, что означает «Java-карта»: http://java.sun.com/javacard/ – MatrixFrog