跳转到路径导航栏
跳转到正文内容

Windows Mobile下猜数字游戏的TDD实现

http://www.sina.com.cn  2009年08月13日 18:50  IT168.com
文本Tag: 微软移动 Windows Embedded WinCE Windows Mobile 微软

 【IT168技术文档】

 背景

 早上看了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      1A0B

 num = 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      0A2B

 num = 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      1A2B

 num = 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      0A0B

 num = 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      0A4B

 num = 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      4A0B

 num = 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 3

 num = new int[] { 1, 1, 2, 3 };

 bingle.Match(num, out a, out b);

 //1 2

 num = new int[] { 1, 2 };

 bingle.Match(num, out a, out b);

 }

 }

 我把对Match测试的代码写在一起,我喜欢一个Test函数对应一个功能函数。而把异常处理分开出来写了,怕前面的测试抛出异常,导致测试通过了。

缂傚倸鍊搁崐鎼佸磹妞嬪孩濯奸柡灞诲劚绾惧鏌熼崜褏甯涢柣鎾寸懄閵囧嫰寮借椤ユ粓鏌涢悢鍛婄稇闁崇粯鎹囬弫鎾绘晸閿燂拷|Android闂傚倸鍊搁崐鐑芥嚄閸撲礁鍨濇い鏍仜閺勩儵鏌涢鐘插姎闁活厽顨婇弻娑㈠箛閳轰礁顥嬪┑鐐村灟閸╁嫰寮崱娑欑厓鐟滄粓宕滈悢闀愮箚闁圭虎鍠栫粻铏繆閵堝倸浜鹃悗鐟版啞缁诲倿鍩為幋锔藉亹闁圭粯宸婚崑鎾剁磼濡⒈娲搁梺缁樺姉閸庛倝鍩涢幋锔界厱婵炴垶锕Λ姘熆鐟欏嫸鑰块柡宀嬬到铻栧ù锝囨嚀绾板秹姊哄畷鍥╁笡婵☆偄鍟村顐﹀箻缂佹ɑ娅㈤梺璺ㄥ櫐閹凤拷 闂傚倸鍊搁崐鐑芥嚄閸洖纾块柣銏⑶归悿鐐節婵犲倸鏆熸鐐存崌閺屾稖顦虫い銊ユ噽婢规洜绱掑Ο闀愮盎闂侀潧鐗嗗ú锕傛倶绾扮吵闂傚倸鍊搁崐鐑芥嚄閸撲礁鍨濇い鏍仜閺勩儵鏌涢鐘插姎闁活厽顨婇弻娑㈠箛閳轰礁顥嬪┑鐐村灟閸╁嫰寮崱娑欑厱闁哄洢鍔屾晶顔济归悩铏仢婵﹤顭峰畷鎺戭潩閸楃儐鏉哥紓鍌欑椤戝棝宕归崸妤€违闁告劦鍠楅弲鎼佹煥閻曞倹瀚� 婵犵數濮烽弫鍛婃叏娴兼潙鍨傜憸鐗堝笚閸婂爼鏌涢鐘插姎闁汇倗鍋撶换婵嬫濞戝崬鍓伴梺鍝勵儎缁舵岸寮婚悢鐓庣鐟滃繒鏁☉銏$厱閻庯綆浜跺Ο鈧悗娈垮枛閻栫厧鐣烽悡搴樻婵☆垯璀﹂悗鎶芥⒒娴e憡鍟為柟鍝ュ厴瀹曪繝骞庨挊澶庢憰闂佹寧绻傞幊澶愬几鎼淬垻绠鹃柛鈩兠慨鍥ㄣ亜韫囥儲瀚� 闂傚倸鍊峰ù鍥х暦閸偅鍙忕€广儱顦粈鍐┿亜閹捐泛鍓卞ù鐓庡暣濮婄粯鎷呴搹鐟扮闂佸湱枪閹芥粓鍩€椤掍胶顣叉繝銏★耿閹箖鎮滈挊澶愬敹闂佸搫娲ㄩ崰搴ㄥ焵椤掑倸鍘撮柡灞诲€楅崰濠囧础閻愬樊娼鹃梻浣风串缁插潡寮繝姘畺鐎瑰嫭澹嬮崼顏堟煕閹扳晛濡块柣鈺侀叄濮婃椽鎮烽弶鎸庮唨闂佺懓鍤栭幏锟�

转发此文至微博

Powered By Google

新浪简介About Sina广告服务联系我们招聘信息网站律师SINA English会员注册产品答疑┊Copyright © 1996-2010 SINA Corporation, All Rights Reserved

新浪公司 版权所有