14

我想在某种模拟/模拟环境中运行我的Java Card应用程序,以便能够对它们运行 JUnit(或任何其他单元测试框架)测试。有人知道这样的工具吗?我更喜欢一些开源项目。

4

4 回答 4

12

为此,我们的团队专门开发了 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());

单元测试示例:http ://code.google.com/p/jcardsim/source/browse/trunk/src/test/java/com/licel/jcardsim/base/SimulatorTest.java

它完全模拟了真正的 NXP 芯片 JavaCard。尝试使用它。欢迎任何意见和想法!如果您分享该项目的链接,我们将不胜感激!

于 2012-04-23T13:24:39.280 回答
1

请注意,这样做的一种方法是在 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 特定代码时要注意这一点。

于 2013-08-23T11:17:47.603 回答
0

不知道 Java Card,但是,乍一看,它似乎与任何其他 JavaME 平台没有太大区别(不同我是指将它们与例如 J2SE 进行比较)。因此,您可以使用任何普通的例如带有Eclipse / Netbeans的JUnit测试环境来使开发更容易一些。您可能需要powermock来模拟一些特定于平台的东西。希望这可以帮助。

Netbeans 的一个提示:您可以考虑单独的测试项目(这取决于您的应用程序项目)。在这种情况下,您可以使用最新 Java 玩具的强大功能对您的 UT 进行编码。

于 2010-11-29T17:40:40.593 回答
0

Java 卡小程序是一段简单的 Java 代码。所以,JUnit 很好。像测试常规 Java 类一样测试它们。

但问题是我从未见过 javacard.* 和 javacardx.* 包中类的 java 实现。如果你能得到它们 - 问题就解决了。

如果你想测试applet 本身是如何工作的(APDU 发送/接收),那么Java Card SDK 中有cref.exe。这是一个javacard模拟器。

于 2011-04-01T11:11:03.800 回答