代码之家  ›  专栏  ›  技术社区  ›  Ben S

如何轻松地对BlackBerry代码进行单元测试?

  •  21
  • Ben S  · 技术社区  · 16 年前

    在我的大学课程中,我们正在开发一个多线程的黑莓应用程序,它允许我们用蓝牙扫描运行我们的应用程序的其他设备,然后通过WiFi接口通过TCP相互传输文件,实现NAT遍历,同时记录我们的GPS位置。(这是一个RIM赞助的计算机网络课程,以防不明显。)

    我越来越喜欢 Test Driven Development 我打算用它来完成我的家庭作业。但是,在测试期间扩展或调用的任何BlackBerry类都会给我一个 ClassFormatError 因为非法的修饰符。我认为这个错误是因为带有BlackBerry代码的JAR必须是为其专有的JVM专门编译的。

    到目前为止,我已经使用 Proxy Pattern 和实施 Mock Objects 代理的数量。然而,这变得非常乏味,因为我继承了许多本地黑莓类。

    如果可能的话,我还想避免启动黑莓模拟器。只需几分钟就可以启动它,这对于单元测试来说是不切实际和烦人的。

    有没有简单的方法来单元测试我的黑莓代码?

    2 回复  |  直到 14 年前
        1
  •  19
  •   Community CDub    8 年前

    模型测试

    你的模拟方法是正确的,但我不建议你在J2SE平台上测试黑莓功能。我认为应该使用代理和实体模型,以防在本机源中没有可用的测试数据,例如:

    “扫描其他设备”-没有其他设备,但您要测试扫描功能
    “WiFi接口上的TCP”-您想在暴风雨中测试它(无WiFi)
    “记录我们的GPS位置”-设备位置是静态的,但您想测试其他位置

    然后,您可以使用BlackBerry平台模拟此类功能:
    BlackBerry GPS location mockup

    不过,您仍然可以使用相同的名称和签名在J2SE上重新生成BlackBerryAPI类。这就假定您必须自己实现所有类功能。

    在没有模拟器的情况下测试J2ME

    这将是一个非常好的选择,但到目前为止,我还不知道如何做到这一点。

    测试涉及到应用程序运行,这涉及到平台模拟。在没有运行整个UI模拟器的情况下,有可能测试J2ME代码,但我不知道。

    您可以做的是在Java标准版上测试一些业务逻辑,并进行最小的代码更改。

    您仍然需要在模拟器上运行依赖于平台的功能测试,但是您可以在一个应用程序中进行,这将是一组单元测试,如Chrisw已经说过的。只需逐个运行测试方法并在屏幕上输出结果:
    方法1-通过-0.03 s
    方法2-通过-1.30 s
    方法3-通过-0.25 s

    J2MENU

    http://j2meunit.sourceforge.net/ :

    J2MEUnice是Java 2微型版 (J2ME)包含一个单元的库 J2ME测试框架 应用。它是基于 原始JUnit的源代码, 成功的单元测试框架 标准(桌面)版 JAVA,J2SE。

    Unit Testing J2ME applications with J2MEUnit and Eclipse
    Quick Tutorial to setup & learn J2MEUnit

    吉蒙特

    http://jmunit.sourceforge.net/ :

    JMUnit是用于 基于JUnit的JavaME(J2ME)。它有 以下功能:
    -既适用于Sun模拟器,也适用于实际设备。
    -很小(即使在旧的MIDP 1.0设备上也可以运行测试)。
    -具有用于检查测试的断言方法的综合集合 失败。
    -同时支持测试用例和测试套件。
    -包括用于在连续构建中运行JMUnit测试的Ant任务。
    -具有受JUnitPerf启发的性能监视类。

    Writing and running JMUnit tests

    BUnter

    RIM单元测试库 基于JMUnit的BlackBerry

    http://sourceforge.net/projects/b-unittesting/
    BlackBerry Support Community Forums: How to do unit testing my Blackberry Application

    附加的

    How To - Automate testing with the BlackBerry Simulator

        2
  •  1
  •   ChrisW    16 年前

    当我想对一些Windows Mobile代码进行单元测试时,我在模拟器/模拟器和/或设备本身上运行它们。

    这是不实际的,因为我不打算在实现每个测试/函数之后启动一个模拟器,这需要将近一分钟的时间。

    我可以引导它,将软件加载到上面,然后运行测试…让它继续运行…重新加载新的应用软件 不重新启动 ,然后重新运行。也许黑莓不允许这样做?

    此外,我可以一次运行一整套测试(不需要在每个测试/功能之间重新启动)。如果你的习惯是:

    1. 编写测试用例
    2. 运行它以确保失败
    3. 编写实现
    4. 再次运行,以确保这次成功
    5. (对于要实现的下一个函数,如上所述重复)

    不过,这也可能发生。设备驱动程序例如:调试繁琐,因为系统可能每次都需要启动,因为如果系统有问题,它们会挂起系统,因为调试器不友好…这样的环境相互作用较小,因此更强调:

    • 第一次就把它弄好了(这样你就不用调试了)
    • 同时实现(和编写测试,以及随后的测试)更大(可能是整个)的功能块