官方文档中什么也没有提到,单元测试中可以使用喜欢的Javascript测试框架。因为不依赖浏览器,所以只要能确认Log输出的即可。
总之,为了在Titanium的控制台输出Log,Titanium.API.info和Titanium.API.error等能测试输出就可以了。
这回我们试着使用Unit系中流行的QUnit和BDD系的Jasmine。
使用QUnit
Titanium使用的Adapter已经在GitHub上公开了。
lukaso/qunit – GitHub
在自己的Project使用的时候,Resources文件夹下保存一下文件就可以了。
* runner.js
* qunit/qunit.js
* qunit/titanium_adaptor.js
* test/tests_to_run.js
然后,在test/tests_to_run.js中写测试内容。 在app.js的任何位置把runner.js文件include后运行即可。
查看titanium_adaptor.js的内容,我们可以看到,它做的事情就是利用QUnit的Logging处理把Log输出到Titanium的控制台上。
所以想输出的时候,按照喜欢的改写也是不难的事情。
在app.js中添加代码确认动作
app.js_snippet中,Tabgroup中追加单元测试用的Tab,只是简单的确认,单纯的在app.js的末尾追加一下行即可测试动作:
Titanium.include('runner.js');
确认动作的test/tests_to_run.js
为了确认动作,什么测试也没有写,只是测试QUnit的动作的例子代码:
module("QUnit on Titanium"); test("OK test(pass)", function () { ok(true); } ); test("equal test(no pass)", function () { equal('hogehoge', 'hige'); } );
动作结果会很好的输出到Titanium的控制台上。
顺便说一下,由于结果中包含了HTML代码,很难理解。使用QUnit-TAP不是很好。
使用Jasmine
Jasmine中,能够自定义测试出力的Reporter,所以可以做成Titanium用的Reporter。
jasmine.js中,提供了基本的Reporter类,可以根据它做成自己的Reporter类。
实际编码的时候可以参考Jasmine官方发布版本中的jasmin-html.js和jasmine.console_reporter.js。
包含了很好出力的Reporter的Jasmine Titanium也已经公开了。
在app.js中添加代码确认动作
还没有任何测试内容,只是确认Jasmine动作的例子代码。
前提是在Resorses/jasmine中,jasmine.js和jasmine-titanium.js(上边的TitaniumReporter)
Ti.include('jasmine/jasmine.js'); Ti.include('jasmine/jasmine-titanium.js'); describe("Jasmine Sample", function() { it("pass!", function() { var foo = 2; expect(foo).toEqual(2); } ); }); describe("Second Jasmine Sample", function() { it("fail!", function() { var foo = 1; expect(foo).toEqual(2); } ); }); jasmine.getEnv().addReporter(new jasmine.TitaniumReporter()); jasmine.getEnv().execute();
执行结束后,就能看到失败的测试和合计结果。
实际的开发中,应该把测试代码统一放在spec文件夹中比较好。
注:
没有spec文件夹或者文件夹为空是不能启动的。
【原文】Titaniumでユニットテスト
这阵子弄出了便携百宝箱的kjava版和andriod版,
android版本的应用自不必说, 可运行在所有andriod1.5/1.6/2.x/3.x系列手机、平板上,没有问题
kjava版本的应用,这个,应用目前来看,应用能力在不断扩展中,目前主流目标平台定位在功能手机上(下面另有测试结果)
不是那种市面上定了的一种平台上运行,
目前收集到的测试方案来看,
1. 可以运行在支持java的所有手机上,这个自不必说(似乎只要一个jar文件就可以直接安装运行)
2. 另外, 可运行在Brew平台上增加了java扩展的手机, 那么怎么知道自己的手机上有没有java扩展呢,好像Brew平台上增加java
扩展已经是很早的事了,所以市面上的Brew平台手机,应该大部份都有java扩展,所以这部分手机完全可以运行这个kjava版本的应用
大家不要低估了自己手机的应用能力(似乎只要一个jar文件就可以直接安装运行)
中兴ZTE R201这种在java手机中根本就排不上号的手机上都可以正常运行(176x220很老的手机啦)
ZTE R201低端配置介绍
3. 经过近期测试,kjava版本的应用已经成功运行中symbian s60系列智能手机上了(似乎需要jar文件和jad文件)
Nokia5230 SymbianOS/9.4; Series60/5.0
诺基亚其它系列的手机还没有测试
总结起来看,这款kjava应用并非只有在java手机上才可以运行,而是可以在任何进行了java扩展的手机上都可以运行
网站上两种版本的应用都提供
手动下载 apk文件 |
原因:
通常在使用simpleCursorAdapter的listview中的onItemClick方法中,
使用Cursor cursor = (Cursor)listView.getItemAtPosition(position);可以的到改位置的cursor,
但如果使用BaseAdapter,由于我们重写了
@Override
public Object getItem(int position) { return cursor.moveToPosition(position); }
而listView的getItemAtPosition方法内部会调用到getItem,所以listView.getItemAtPosition(position)实际上不是返回Object而是boolean值