西安模板做网站,福州定制网站开发制作,打开网站是iis7,免费投票网站制作背景 TDD测试驱动开发是当前流行的开发方法及模式。遵循TDD的方法对开发程序库(Library)特别有用#xff0c;因为Library就是为第三方提供一定功能接口的实现#xff0c;使用TDD的方法可以预先为定义的接口提供测试案例#xff0c;保证实现代码能通过测试#xff0c;保证Li…背景 TDD测试驱动开发是当前流行的开发方法及模式。遵循TDD的方法对开发程序库(Library)特别有用因为Library就是为第三方提供一定功能接口的实现使用TDD的方法可以预先为定义的接口提供测试案例保证实现代码能通过测试保证Library能如实的实现预定义的功能。我之前开发的Mobile Sensors API的库由于没有编写单元测试得到了一些不好的反馈现在把单元测试引进到该库里面提高该库的质量。关于该Mobile Sensors API库的开发可以参考 Windows Mobile下的重力感应器(Gravitational Sensor)开发。关于wince和Windows mobile下的native C的测试可以参考 Wince和Windows Mobile下native C的单元测试。关于CF平台下的测试可以参考 .NET Compact Framework下的单元测试。 使用TDD的一个实例可以参考 Windows Mobile下猜数字游戏的TDD实现。 简介 本文讲述Windows Mobile下使用CppUnitLite对native c进行unit test的时候如何把测试结果输出到文件的开发。使之支持Mobile Sensors API库。 实现 由于原版的CppUnitLite只是支持把测试结果打印到标准输出里面但是Windows Mobile默认是没有console输出的所以要对CppUnitLite进行修改使之支持把结果输入到文件里。 修改定义 #include stdio.hclass Failure;class TestResult{public: TestResult (char* _fileName 0); virtual void testsStarted ();virtual void addFailure (const Failure failure);virtual void testsEnded ();private:int failureCount;char* fileName; FILE* fileStream;}; 这个功能的实现需要修改TestResult类首先增加fileName变量保持输出文件路径和名字增加fileStream保存文件流的句柄。然后修改TestResult的构造函数原构造函数是没有输入参数的如TestResult ();修改为增加文件路径和名字输入参数。 TestResult (char* _fileName 0);为了保持原先client代码的源码级兼容这个参数有默认值为0(空,NULL)。这里说的client源码级的兼容是指client的代码不需要进行任何的修改就可以支持修改后的新库这符合软件设计过程的Open-Close Principle。但是这修改不支持运行时兼容client需要重新编译(因为头文件修改了)和链接(因为CppUnitLite静态库更新了)。 更新实现 TestResult::TestResult (char* _fileName) : failureCount (0), fileName(_fileName){} 修改构造函数把输入保存到成员变量中。 void TestResult::testsStarted () {if(fileName ! NULL) { fileStream fopen(fileName, w); }else{ fileStream stdout; }} 修改启动测试函数当文件名不为空的时候生成输出文件流(stream)。如果为空时使用标准输出流。 void TestResult::addFailure (const Failure failure) { fprintf (fileStream, %s%s%s%s%ld%s%s\n,Failure: \, failure.message.asCharString (),\ ,line , failure.lineNumber, in , failure.fileName.asCharString ()); failureCount;} 把错误信息输出到输出流中。 void TestResult::testsEnded () {if (failureCount 0) fprintf (fileStream, There were %ld failures\n, failureCount);elsefprintf (fileStream, There were no test failures\n);if(fileName ! NULL fileStream ! NULL) { fflush(fileStream); fclose(fileStream); fileStream NULL; }} 清理资源在Wince和Windows Mobile下有时候需要显式(explicit)的调用fflush否则有些输出不能同步到文件中去。 Client的修改 //Unit TestTestResult tr(TestResult.txt);TestRegistry::runAllTests(tr); 修改client的代码很简单只需要在生成TestResult 的对象是传递文件名就可以了如果不传递绝对路径文件会生成到根目录下。 关于Mobile Sensors API项目 这个项目还是在起步阶段当前实现了samsung的重力感应器我把项目host到 Mobile Sensors API - Native unified APIs for Windows Mobile Sensors 了我会持续改进把各种sensors的实现到这个项目中。 由于我手头上没有HTC的机器如果谁有兴趣可以加入到项目中帮我测试HTC设备由于加入了Unit Test测试变得很简单只需要执行程序参考测试输出文件就可以了不需要调试。当然这个测试过程是一个不断迭代的过程只是Unit Test把子过程简单化了。源代码http://mobilesensor.codeplex.com/SourceControl/ListDownloadableCommits.aspx 环境VS2008 WM 6 professional SDK Samsung Windows Mobile SDK