JUnit (またはその他の単体テスト フレームワーク) テストを実行できるように、ある種のエミュレート/シミュレートされた環境でJava Cardアプリケーションを実行したいと考えています。そのようなツールを知っている人はいますか?私はいくつかのオープンソースプロジェクトを好むでしょう。
4 に答える
この目的のために、私たちのチームは 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());
本物の NXP チップ JavaCard を完全にエミュレートします。使ってみてください。コメントやアイデアは大歓迎です!プロジェクトへのリンクを共有していただければ幸いです。
これを行う 1 つの方法は、Java SE で JUnit テストを作成し、APDU を使用して Java Card のクラスと通信することです。明らかに、これは Java Card でクラスを直接テストすることと同じではありませんが、物乞いは選択者になることはできません。一般に、何らかの変換を行うアプレットを作成する必要があります。これは、Mikhail からの jCardSim の回答で使用されている方法です。もちろん、実際のカードでも使用できますが、コード カバレッジが失われ、デバッグ オプションが失われる可能性があります。
別の方法 (独自の実用的なソリューションがあります) は、カードに単体テストを実装し、Java SE の JUnit テスト フレームワークからそれらを呼び出すことです。これは大変な作業です。これを機能させるには、独自のList
実装を生成する必要がありました。しかし、それだけの価値はありました。Java Card 内から Java Card で定義されたオブジェクトと型を使用できます。私の知る限り、これに代わるオープンソースはありません。
アプレットのコンパイル中に完全な JRE を使用できるため、JUnit テスト フレームワークを jCardSim に追加してクラスを直接テストすることもできます。jCardSim はまだ完全に機能する Java Card ではないことに注意してください (たとえば、API で指定されたメモリのリセットがない、トランザクション サポートがないなど)。そのため、Java Card 固有のコードをテストするときはこの点に注意してください。
Java Cardはわかりませんが、一見すると、他のJavaMEプラットフォームとそれほど変わらないように見えます(異なるとは、たとえばJ2SEと比較することを意味します)。そのため、 Eclipse / Netbeansを使用した通常のJUnitテスト環境を使用して、開発を少し簡単にすることができます。プラットフォーム固有のものをモックするには、 powermockが必要になる場合があります。お役に立てれば。
Netbeansのヒント:テスト用に別のプロジェクトを検討することもできます(アプリケーションプロジェクトによって異なります)。その場合、最新のJavaおもちゃの力でUTをコーディングすることができます。
Java カード アプレットは、単純な Java コードです。だから、JUnitは大丈夫です。通常の Java クラスをテストするようにテストしてください。
しかし問題は、javacard.* および javacardx.* パッケージ内のクラスの Java 実装を見たことがないことです。あなたがそれらを手に入れるなら - 問題は解決されます。
アプレット自体の動作 (APDU 送受信) をテストする場合は、Java Card SDK に cref.exe があります。これは javacard エミュレーターです。