【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函数对应一个功能函数。而把异常处理分开出来写了,怕前面的测试抛出异常,导致测试通过了。