Windows Mobile下猜数字游戏的TDD实现
背景
早上看了TDD by example (1) -- 挑战,觉得有趣,实现一个Windows Mobile版本。很多年前我也有一台文曲星,也常常玩这个猜数字游戏,所以尝试在Windows Mobile下实现。
方案
Nick Wang (懒人王) 强调需要TDD,所以我的实现方案也是TDD。
实现
使用NUintLite
测试代码需要使用NUintLite,NUintLite具体可以参考 .NET Compact Framework下的单元测试。修改Main函数如下,把结果写到SD卡上。
static void Main(string[] args) { System.IO.TextWriter writer = new System.IO.StreamWriter("\\Storage Card\\TestResult.txt");new NUnitLite.Runner.TextUI(writer).Execute(args); writer.Close(); Application.Run(new MainForm()); }
编写测试代码
TDD,先写测试代码。测试代码的逻辑是按照TDD by example (1) -- 挑战写的,在实际使用中根据功能需求编写。
[TestFixture]class BingleTest{private Bingle bingle; [SetUp]public void SetUp() { bingle = new Bingle(); } [TearDown]public void TearDown() { } [Test]public void BuildAnswersTest() { bingle.BuildAnswers();Assert.True(bingle.Answers[0] != bingle.Answers[1] && bingle.Answers[0] != bingle.Answers[2] && bingle.Answers[0] != bingle.Answers[3] && bingle.Answers[1] != bingle.Answers[2] && bingle.Answers[1] != bingle.Answers[3] && bingle.Answers[2] != bingle.Answers[3]); } [Test]public void MatchTest() { bingle.Answers = new int[] { 1, 2, 3, 4 }; int a;int b;int[] num; //1 5 6 7 1A0Bnum = new int[] { 1, 5, 6, 7 }; bingle.Match(num, out a, out b);Assert.That(a, Is.EqualTo(1));Assert.That(b, Is.EqualTo(0)); //2 4 7 8 0A2Bnum = new int[] { 2, 4, 7, 8 }; bingle.Match(num, out a, out b);Assert.That(a, Is.EqualTo(0));Assert.That(b, Is.EqualTo(2)); //0 3 2 4 1A2Bnum = new int[] { 0, 3, 2, 4 }; bingle.Match(num, out a, out b);Assert.That(a, Is.EqualTo(1));Assert.That(b, Is.EqualTo(2)); //5 6 7 8 0A0Bnum = new int[] { 5, 6, 7, 8 }; bingle.Match(num, out a, out b);Assert.That(a, Is.EqualTo(0));Assert.That(b, Is.EqualTo(0)); //4 3 2 1 0A4Bnum = new int[] { 4, 3, 2, 1 }; bingle.Match(num, out a, out b);Assert.That(a, Is.EqualTo(0));Assert.That(b, Is.EqualTo(4)); //1 2 3 4 4A0Bnum = new int[] { 1, 2, 3, 4 }; bingle.Match(num, out a, out b);Assert.That(a, Is.EqualTo(4));Assert.That(b, Is.EqualTo(0)); } [Test] [ExpectedException(typeof(ArgumentException))]public void MatchTest2() {int a;int b;int[] num; //1 1 2 3num = new int[] { 1, 1, 2, 3 }; bingle.Match(num, out a, out b); //1 2num = new int[] { 1, 2 }; bingle.Match(num, out a, out b); } }
我把对Match测试的代码写在一起,我喜欢一个Test函数对应一个功能函数。而把异常处理分开出来写了,怕前面的测试抛出异常,导致测试通过了。
功能代码
功能代码的目的就是通过所以单元测试。
public class Bingle{public int[] Answers { set; get; }private int attemptTimes; public int AttemptTimes {get{return attemptTimes; } } public Bingle() { Answers = new int[4]; } public void BuildAnswers() {Random r = new Random();while(true) {int i = r.Next(9999); Answers[0] = i / 1000; Answers[1] = i % 1000 / 100; Answers[2] = i % 100 / 10; Answers[3] = i % 10; if (Answers[0] != Answers[1] && Answers[0] != Answers[2] && Answers[0] != Answers[3] && Answers[1] != Answers[2] && Answers[1] != Answers[3] && Answers[2] != Answers[3]) {return; } } } public bool Match(int[] attemptNum, out int bingle, out int match) { bingle = 0; match = 0;if (attemptNum.Length != 4) {throw new ArgumentException("Should be 4 digits."); }if(!(attemptNum[0] != attemptNum[1] && attemptNum[0] != attemptNum[2] && attemptNum[0] != attemptNum[3] && attemptNum[1] != attemptNum[2] && attemptNum[1] != attemptNum[3] && attemptNum[2] != attemptNum[3])) {throw new ArgumentException("Should be non repeating 4 digits."); } ++attemptTimes;for(int i=0; i<4; ++i) {if (attemptNum[i] == Answers[i]) { ++bingle; }else{for (int j = 0; j < 4; ++j) {if (attemptNum[i] == Answers[j]) { ++match; } } } }return (bingle == 4); } }
单元测试结果
如果通过所有单元测试,说明功能代码编写完毕,每次修改都有run单元测试。
NUnitLite version 0.2.0Copyright 2007, Charlie Poole Runtime Environment - OS Version: Microsoft Windows CE 5.2.21234 .NET Version: 2.0.7045.0 /Files/procoder/Bingle.rar3 Tests : 0 Errors, 0 Failures, 0 Not Run
UI 处理
功能代码写完以后,可以写UI了,具体UI代码见源代码,下面是执行效果。
源代码:Bingle.rar
环境: VS 2008 + WM 6 professional SDK + NUnitLite
转载于:https://www.cnblogs.com/procoder/archive/2009/07/08/1519122.html
Windows Mobile下猜数字游戏的TDD实现相关推荐
- Windows Mobile下使用CppUnitLite输出测试结果
背景 TDD测试驱动开发是当前流行的开发方法及模式.遵循TDD的方法对开发程序库(Library)特别有用,因为Library就是为第三方提供一定功能接口的实现,使用TDD的方法可以预先为定义的接口提 ...
- 【查找】临近省赛,Alan邀请emoji玩起了猜数字游戏活跃一下大脑。游戏规则如下:首先Alan写下几个数字让emoji猜,当emoji猜完之后,Alan会给他一个提示(java)
临近省赛,Alan邀请emoji大佬玩起了猜数字游戏活跃一下大脑.游戏规则如下: 首先Alan写下几个数字让emoji大佬猜,当emoji大佬猜完之后,Alan会给他一个提示,这个提示包含两部分:全对 ...
- 用python做C语言的猜数字游戏,[Python3 练习] 007 简单的猜数字小游戏
题目:简单的猜数字小游戏 (1) 描述 程序随机生成一个数字,玩家用键盘输入所猜数字,在规定次数内猜对为胜. (2) 要求 程序随机生成一个 1 到 100 的自然数 有 7 次机会去猜 机会用尽之前 ...
- python猜数字1001untitled_如何利用Matlab GUI制作猜数字游戏
第二堂课布置了一个Mission Impossible:如何利用Matlab GUI制作猜数字游戏 这个任务对很多人来说会非常困难,首先要面对的是 Matlab GUI的机制,这是完全未知的机制,在面 ...
- java猜数字游戏课程设计报告_Java程序设计课程设计-猜数字游戏设计.doc
Java程序设计课程设计-猜数字游戏设计.doc 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 课 程 设 计 报 告课程设计名称 Jav ...
- c语言课程设计猜数字游戏报告,C语言课程设计-猜数字游戏报告.doc
C语言课程设计-猜数字游戏报告 摘要 该软件在Windows系统上为玩家提供猜数字游戏的基本功能,游戏用户可以选择开始游.排行榜查看.帮助等主要功能.当用户选择开始游戏时,系统会提示用户排行榜上猜数字 ...
- c语言课程设计猜数字游戏报告,C语言课程设计猜数字游戏报告
C语言课程设计猜数字游戏报告 C 语言课程设计----猜数字1摘 要该 软 件 在 Windows 系 统 上 为 玩 家 提 供 猜 数 字 游 戏的 基 本 功 能 , 游 戏 用 户 可 以 选 ...
- Windows Mobile下访问Sqlite的Native C++封装
背景 当前移动设备开发领域,在本地数据存储方面,Sqlite几乎成了事实标准,Andriod (android.database.sqlite),iPhone (SQLite for iPhone S ...
- python猜数字游戏简单-python猜数字游戏快速求解解决方案
python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...
最新文章
- 中科曙光携手甘肃酒泉,积极构建新型智慧城市
- Mysql入门实战中
- 千千静听歌词秀歌词搜不到_还在用QQ音乐、网易云?这个不到2M的听歌软件,美到炸!...
- exports、module.exports和export、export default到底是咋回事
- JDBC--Java Database Connectivity
- springMVC问题XXX is not mapped [from XX]或者Unknown entity: com.spring.main.pojo.Person
- Cachegrind:缓存和分支预测分析器
- Oracle/MySQL/PostgreSQL考题等你挑战(附假期活动获奖名单)
- 计算机图形学E1——OpenGL 方中有圆,圆中有方,无穷尽焉
- (73)FPGA模块调用(VHDL调用system Verilog)
- 任正非华为为什么暂不推出鸿蒙,任正非表示,华为的鸿蒙系统已经上网?惊喜吗...
- Hdu 1794 【二维成段更新】.cpp
- MariaDB数据库用户创建/删除及权限授权/撤回
- 大学入学计算机基础考试考什么,大学入学考试计算机基础考试.docx
- python自动化中使用unittestreport输出测试报告
- 墨刀怎么注册_墨刀的使用
- PowerDesigner16.5 生成MySQL 数据库模型
- python中的self
- python按照号段生成手机号接收验证码,「 python 」 python 实现短信验证码
- 【故障诊断】基于粒子群和多元宇宙算法优化最大相关峭度解卷积(MCKD)实现信号处理附matlab代码
热门文章
- python单元测试教程_Python单元测试框架unittest使用方法讲解
- android仿微信图片编辑器,electron/vue可编辑框contenteditable|仿微信截图
- linux中csh怎么运行,bash csh 设置环境变量 方法例子
- mysql long varchar2_案例:Oracle数据库long查询结果转换为varchar2类型方法的操作步骤...
- java 任务栏程序_如何在任务栏显示java程序图标
- ubuntu中的大小写
- 大学java怎么算学得好_为什么现在大学里很多计算机系的大学生,学编程的时候总学不好...
- java json clone_再谈java clone 以及 浅/深拷贝
- 百度图神经网络——论文节点比赛baseline代码注解
- opencv如何读取仪表中的指针刻度