标签 Google 下的文章

“MT710”请回了家

近期中国移动推广3G业务普惠大众,推出多款3G定制机参加存话费增手机活动。先是一位同事存了一款多普达的强机,这让我心痒不已^_^。但是Windows Mobile的系统我是不喜欢的。到辽宁移动网站上查看了一下参加活动的机型,发现了一款心仪的型号:摩托罗拉MT710,就是近期电视广告里频频曝光的那款黑红机,上周六我就迫不及待的到营业厅将这款强机请回了家。

MOTO的机子说实话不咋样,机子谈不上精致,配置谈不上顶级,细节之处处理的也不及诺基亚和多普达,电池更是为大众所诟病,但是就这款手机我第一眼就看中了,也没什么办法不是。之前我也一直在用Moto的手机,用了很长时间了,本也打算换了。

用了两天,列一些这款机型的优缺点,供大家参考:

【长处】
1、OPhone系统(基于Google Android,对于程序员的我来说,有一定吸引力)
2、外观时尚漂亮(黑红搭配,我喜欢)
3、WIFI+WAPI(行货iPhone都不具备的哦^_^)
4、手机电视+GPS导航 (虽然不常用,但是功能必须都要具备^_^)

【不足】
1、电池持续时间短(省着用,也就两天)
2、电阻屏(手指操作体验不好,不及电容屏)
3、网上资料较少(新机器,新系统,资料少可以理解)

【遗留问题】
1、不知如何关闭主屏中的“快讯”?
2、不知如何关闭功能键按键振动效果?

cmockery支持mock输出参数

近两天一有空就会去看看项目代码,思考一下如何利用cmockery对项目里已有的代码进行测试。项目代码中很多被调用的接口都带有输出参数,而且在这些接口中多利用返回值指示执行成败也否,而利用输出参数返回一些关键结果,这些结果值甚至影响着后续的函数执行流程。前期研究cmockery时没有注意到cmockery是否可以设置被mock接口的输出参数的值,不过回顾了一下cmockery实现的原理,觉得cmockery是应该可以支持的。遂重新翻看了一下cmockery的manual,发现在mock_query_database中确有对输出参数的mock调用,代码如下:

// Mock query database function.
unsigned int mock_query_database( DatabaseConnection* const connection,
                                 const char * const query_string, void *** const results)
{
 *results = (void**)mock();
 return (unsigned int)mock();
}

void test_get_customer_id_by_name(void **state) {
 DatabaseConnection connection = { "somedatabase.somewhere.com", 12345678, mock_query_database };
 int customer_ids = 543;
 will_return(mock_query_database, &customer_ids);
 will_return(mock_query_database, 1);
 assert_int_equal(get_customer_id_by_name(&connection, "john doe"), 543);
}

上面代码在test_get_customer_id_by_name中两次针对被mock的接口mock_query_database调用will_return,实际上是在符号“mock_query_database”对应的value list里插入了两个item,第一个item的值为&customer_ids,第二个为1。当测试执行到mock_query_database的第一个mock时,返回第一个item:&customer_ids,执行到第二个mock时返回第二个item的值1。这样在测试过程中设置输出参数值的目的就达到了。

在使用cmockery时唯一需要你关注的就是will_return设置的顺序和在被mock接口中调用mock的顺序,切记不要弄反了。

这里再举一个例子,再直观感受一下:

/* message_handler.c */

#include

extern int dispatch_message(void *msg);
extern int get_next_message(void **msg);

int handle_next_message() {
        void *  temp_msg        = NULL;
        int     rv              = 0;           

        rv = get_next_message(&temp_msg);
        if (!rv) {                     
                if (!temp_msg) {                               
                        return -1;
                } else {                                                               
                        return dispatch_message(temp_msg);
                }                                                                                              

        }                                                              

        return rv;
}

/* test_message_handler.c */
#include
#include
#include
#include "cmockery.h"
#include

int dispatch_message(void *msg) {
        return 0;
}

int get_next_message(void **msg) {
        (*msg) = (void*)mock();
        return (int)mock();
}

extern int handle_next_message();

void test_handle_next_message_success(void **state) {
        will_return(get_next_message, 0×1234);
        will_return(get_next_message, 0);
        assert_true(handle_next_message() == 0);
}

void test_handle_next_message_fail(void **state) {
        will_return(get_next_message, NULL);
        will_return(get_next_message, 0);
        assert_true(handle_next_message() == -1);
}

int main() {
        const UnitTest tests[] = {
                unit_test(test_handle_next_message_success),
                unit_test(test_handle_next_message_fail)
        };
        return run_tests(tests);
}

执行结果:
test_handle_next_message_success: Starting test
test_handle_next_message_success: Test completed successfully.
test_handle_next_message_fail: Starting test
test_handle_next_message_fail: Test completed successfully.
All 2 tests passed

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats