如何轻松单元测试Blackberry代码?

时间:2009-06-20 00:54:45

标签: java unit-testing blackberry tdd

对于我的大学课程,我们正在开发一个多线程Blackberry应用程序,它允许我们使用蓝牙扫描运行我们应用程序的其他设备,然后通过Wifi接口通过TCP传输文件,实现NAT遍历,一直记录我们的GPS位置。 (这是RIM赞助的计算机网络课程,如果还不明显的话。)

我已经喜欢Test Driven Development,并且会用它来完成我的家庭作业。但是,由于非法修饰符,我在测试期间扩展或以其他方式调用的任何Blackberry类都会给我ClassFormatError。我认为这个错误是由于带有Blackberry代码的jar必须是专门为其专有JVM编译的。

到目前为止,我已经使用Proxy Pattern并实施代理Mock Objects。但是,由于我继承了许多原生Blackberry类,因此这变得非常乏味。

我还想避免在可能的情况下启动Blackberry模拟器。启动它可能需要几分钟,这对于单元测试来说是不切实际和恼人的。

我可以通过简单的方法对Blackberry代码进行单元测试吗?

2 个答案:

答案 0 :(得分:19)

样机测试

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

“扫描其他设备” - 没有其他设备,但您想测试扫描功能
“通过Wifi接口的TCP” - 你想在Storm(没有WiFi)上测试它 “记录我们的GPS位置” - 设备位置是静态的,但您想测试其他位置

然后你可以使用Blackberry平台模拟这样的功能:
BlackBerry GPS location mockup

您仍然可以使用相同的名称和签名从头开始在J2SE上重现BlackBerry API类。那假定您必须自己实现所有类功能。

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

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

测试涉及应用程序运行,这涉及平台模拟。如果没有运行整个UI模拟器,可以测试j2me代码,但我不知道。

您可以做的是在Java Standard Edition上测试一些业务逻辑,并尽可能减少代码更改。

你仍然需要在模拟器上运行平台相关的功能测试,但是你可以在一个应用程序中完成它,这将是一组单元测试,就像ChrisW已经说过的那样。只需逐个运行测试方法并在屏幕上输出结果:
方法1 - 通过 - 0.03 s
方法2 - 通过 - 1.30 s
方法3 - 通过 - 0.25秒

J2MEUnit

http://j2meunit.sourceforge.net/

  

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

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

使用JMUnit

http://jmunit.sourceforge.net/

  

JMUnit是一个单元测试框架   Java ME(J2ME)基于JUnit。它有   以下特点:
   - 适用于Sun仿真器和实际设备    - 很小(即使在旧的MIDP 1.0设备上也可以运行测试)    - 具有用于检查测试的全面Assert方法集合   故障。
   - 支持TestCases和TestSuite    - 包括用于在连续构建中运行JMUnit测试的Ant任务    - 性能监控课程的灵感来自JUnitPerf。

Writing and running JMUnit tests

BUNIT

  

RIM的单元测试库   黑莓基于jmunit

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

答案 1 :(得分:1)

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

  

这是不切实际的,因为我不打算在实现每个测试/功能后启动一个需要近一分钟启动的模拟器。

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

此外,我可以一次性运行一整套测试(无需在每个测试/功能之间重新启动)。也许这与TDD不相容,如果你的习惯是:

  1. 编写测试用例
  2. 运行它以确保失败
  3. 编写实现
  4. 再次运行,以确保此次成功
  5. (如上所述重复下一个要实施的功能)
  6. 虽然可能会发生。设备驱动程序例如:繁琐的调试,因为系统可能需要每次启动,因为如果它们有问题,它们会挂起系统,因为调试器不是用户友好的...这样的环境交互性较小,所以更加强调:

    • 第一次正确使用(因此您无需调试)
    • 一次实现(并编写测试并随后测试)更大的(可能是整个)功能块