我想在某种模拟/模拟环境中运行我的Java Card应用程序,以便能够对它们运行 JUnit(或任何其他单元测试框架)测试。有人知道这样的工具吗?我更喜欢一些开源项目。
4 回答
为此,我们的团队专门开发了 jCardSim:开源 JavaCard 模拟器 - 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。尝试使用它。欢迎任何意见和想法!如果您分享该项目的链接,我们将不胜感激!
请注意,这样做的一种方法是在 Java SE 中创建 JUnit 测试,并使用 APDU 与 Java Card 中的类进行通信。显然这和在 Java Card 中直接测试类是不一样的,但是乞丐不能做选择者。一般来说,您需要创建一个 Applet 来为您进行一些转换。这是Mikhail 的 jCardSim 答案中使用的方法- 它当然也可以在真实卡上使用,但您会失去任何代码覆盖率和 - 可能 - 调试选项。
另一种方法(我有一个专有的、有效的解决方案)是在卡上实现单元测试,并从 Java SE 的 JUnit 测试框架中调用它们。这是很多工作;我必须生成自己的List
实现才能使其正常工作。不过这是值得的;它让我可以在 Java Card 中使用 Java Card 定义的对象和类型。据我所知,没有开源替代方案。
可以选择将 JUnit 测试框架添加到 jCardSim 并直接测试类,因为完整的 JRE 在 Applet 编译期间可用。请注意,jCardSim 还不是一个功能齐全的 Java Card(例如,没有在 API 中指定的内存重置,没有事务支持等),所以在测试 Java Card 特定代码时要注意这一点。
Java 卡小程序是一段简单的 Java 代码。所以,JUnit 很好。像测试常规 Java 类一样测试它们。
但问题是我从未见过 javacard.* 和 javacardx.* 包中类的 java 实现。如果你能得到它们 - 问题就解决了。
如果你想测试applet 本身是如何工作的(APDU 发送/接收),那么Java Card SDK 中有cref.exe。这是一个javacard模拟器。