如何轻松对黑莓代码进行单元测试?

2022-09-02 04:28:50

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

我越来越喜欢测试驱动开发,并打算用它来开发我的家庭作业。但是,由于非法修饰符,我在测试期间扩展或以其他方式调用的任何黑莓类都会给我一个ClassFormatError。我推测这个错误是因为带有黑莓代码的jar必须是专门为其专有的JVM编译的。

到目前为止,我已经诉诸于使用代理模式并实现代理的模拟对象。但是,这变得非常乏味,因为我继承了许多原生黑莓类。

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

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


答案 1

模型测试

你在模型方面走在正确的道路上,但我不建议你在J2SE平台上测试黑莓的功能。我认为应该在原生源代码中没有可用的测试数据的情况下使用代理和模型,例如:

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

然后,您可以使用黑莓平台模拟此类功能:
黑莓GPS位置模型

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

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

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

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

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

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

J2MEUnit

http://j2meunit.sourceforge.net/

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

使用 J2MEUnit 和 Eclipse 对 J2ME 应用程序进行单元测试,以设置和学习 J2MEUnit

JMUnit

http://jmunit.sourceforge.net/

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

编写和运行 JMUnit 测试

单位

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


http://sourceforge.net/projects/b-unittesting/ 黑莓支持社区论坛:如何对我的黑莓应用程序进行单元测试

附加

如何 - 使用黑莓模拟器自动执行测试


答案 2

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

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

我可以启动它,将软件加载到它上面,然后运行测试...让它运行...在不重新启动的情况下将新的应用程序软件重新加载到它上面,然后重新运行它。也许黑莓手机不允许这样做?

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

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

不过,它可能会发生。例如,设备驱动程序:调试繁琐,因为系统可能需要每次都启动,因为它们在有错误时会挂起系统,因为调试器不是用户友好的......像这样的环境的相互作用较少,因此更加强调:

  • 第一次就做对了(这样你就不必调试了)
  • 一次实现(并编写测试,然后测试)更大(也许是整个)的功能块

推荐