|
(小一時間がたって)……うむ。良いようぢゃな。ここまでとしよう。
|
出来上がった電卓(Windowsフォーム) |
using Microsoft.VisualStudio.TestTools.UnitTesting;
using 電卓Lib;
namespace 電卓が動作する
{
[TestClass]
public class 数キーが使える
{
電卓 電卓;
[TestInitialize()]
public void 初期化()
{ 電卓 = new 電卓(); }
[TestMethod]
public void 数のキーを押していくと表示されていく()
{
Assert.AreEqual<string>("0", 電卓.表示);
電卓.数のキーを押す(0);
Assert.AreEqual<string>("0", 電卓.表示);
電卓.数のキーを押す(1);
Assert.AreEqual<string>("1", 電卓.表示);
電卓.数のキーを押す(2);
Assert.AreEqual<string>("12", 電卓.表示);
電卓.数のキーを押す(0);
Assert.AreEqual<string>("120", 電卓.表示);
}
[TestMethod]
public void 十桁まで数が入るがそれより多くは入らない()
{
電卓.数のキーを押す(1);
電卓.数のキーを押す(2);
電卓.数のキーを押す(3);
電卓.数のキーを押す(4);
電卓.数のキーを押す(5);
電卓.数のキーを押す(6);
電卓.数のキーを押す(7);
電卓.数のキーを押す(8);
電卓.数のキーを押す(9);
電卓.数のキーを押す(0);
Assert.AreEqual<string>("1234567890", 電卓.表示);
電卓.数のキーを押す(1);
Assert.AreEqual<string>("1234567890", 電卓.表示);
}
}
[TestClass]
public class 足し算ができる
{
電卓 電卓;
[TestInitialize()]
public void 初期化()
{ 電卓 = new 電卓(); }
[TestMethod]
public void 足し算キーとイコールキーで足し算ができる()
{
電卓.数のキーを押す(1);
電卓.数のキーを押す(2);
電卓.数のキーを押す(3);
Assert.AreEqual<string>("123", 電卓.表示);
電卓.足すキーを押す();
Assert.AreEqual<string>("123", 電卓.表示);
電卓.数のキーを押す(4);
電卓.数のキーを押す(5);
Assert.AreEqual<string>("45", 電卓.表示);
電卓.イコールキーを押す();
Assert.AreEqual<string>("168", 電卓.表示);
電卓.イコールキーを押す();
Assert.AreEqual<string>("168", 電卓.表示);
}
[TestMethod]
public void 連続した足し算もできる()
{
電卓.数のキーを押す(8);
電卓.数のキーを押す(9);
Assert.AreEqual<string>("89", 電卓.表示);
電卓.足すキーを押す();
Assert.AreEqual<string>("89", 電卓.表示);
電卓.数のキーを押す(2);
Assert.AreEqual<string>("2", 電卓.表示);
電卓.足すキーを押す();
Assert.AreEqual<string>("91", 電卓.表示);
電卓.数のキーを押す(5);
電卓.数のキーを押す(6);
電卓.数のキーを押す(1);
Assert.AreEqual<string>("561", 電卓.表示);
電卓.足すキーを押す();
Assert.AreEqual<string>("652", 電卓.表示);
電卓.数のキーを押す(2);
Assert.AreEqual<string>("2", 電卓.表示);
電卓.イコールキーを押す();
Assert.AreEqual<string>("654", 電卓.表示);
}
}
[TestClass]
public class クリアキーが使える
{
電卓 電卓;
[TestInitialize()]
public void 初期化()
{ 電卓 = new 電卓(); }
[TestMethod]
public void いきなりクリアキーを押すと0のまま()
{
電卓.クリアキーを押す();
Assert.AreEqual<string>("0", 電卓.表示);
}
[TestMethod]
public void 数の入力後にクリアキーを押すと0に戻る()
{
電卓.数のキーを押す(4);
電卓.数のキーを押す(4);
電卓.クリアキーを押す();
Assert.AreEqual<string>("0", 電卓.表示);
}
[TestMethod]
public void 足し算で加数の入力直後にクリアキーを押すと0に戻り加数を入れ直すことができる()
{
電卓.数のキーを押す(3);
電卓.足すキーを押す();
電卓.数のキーを押す(5);
電卓.クリアキーを押す();
電卓.数のキーを押す(7);
電卓.イコールキーを押す();
Assert.AreEqual<string>("10", 電卓.表示);
}
[TestMethod]
public void 足し算で加数の入力直後にクリアキーを押すと0に戻りそのままイコールキーを押すと被加数が表示される()
{
電卓.数のキーを押す(1);
電卓.足すキーを押す();
電卓.数のキーを押す(2);
電卓.クリアキーを押す();
Assert.AreEqual<string>("0", 電卓.表示);
電卓.イコールキーを押す();
Assert.AreEqual<string>("1", 電卓.表示);
}
}
[TestClass]
public class 全クリアキーも使える
{
電卓 電卓;
[TestInitialize()]
public void 初期化()
{ 電卓 = new 電卓(); }
[TestMethod]
public void いきなり全クリアキーを押すと0のまま()
{
電卓.全クリアキーを押す();
Assert.AreEqual<string>("0", 電卓.表示);
}
[TestMethod]
public void 数の入力後に全クリアキーを押すと0に戻る()
{
電卓.数のキーを押す(2);
電卓.全クリアキーを押す();
Assert.AreEqual<string>("0", 電卓.表示);
}
[TestMethod]
public void 足し算で加数の入力直後に全クリアキーを押してしまうと0に戻り足し算が取り消されてしまう()
{
電卓.数のキーを押す(9);
電卓.足すキーを押す();
電卓.数のキーを押す(2);
電卓.全クリアキーを押す();
電卓.数のキーを押す(3);
電卓.イコールキーを押す();
Assert.AreEqual<string>("3", 電卓.表示);
}
[TestMethod]
public void 足し算で加数の入力直後に全クリアキーを押すと0に戻りそのままイコールキーを押しても0が表示される()
{
電卓.数のキーを押す(7);
電卓.足すキーを押す();
電卓.数のキーを押す(1);
電卓.全クリアキーを押す();
Assert.AreEqual<string>("0", 電卓.表示);
電卓.イコールキーを押す();
Assert.AreEqual<string>("0", 電卓.表示);
}
}
[TestClass]
public class 表示更新ハンドラが呼ばれる
{
電卓 電卓;
string 表示文字列 = string.Empty;
[TestInitialize()]
public void 初期化()
{
電卓 = new 電卓();
電卓.表示更新 += 表示;
}
[TestMethod]
public void 足し算中に表示更新されるたびに表示更新ハンドラが呼ばれる()
{
Assert.AreEqual<string>("", 表示文字列);
電卓.数のキーを押す(1);
Assert.AreEqual<string>("1", 表示文字列);
電卓.足すキーを押す();
電卓.数のキーを押す(2);
Assert.AreEqual<string>("2", 表示文字列);
電卓.数のキーを押す(3);
Assert.AreEqual<string>("23", 表示文字列);
電卓.イコールキーを押す();
Assert.AreEqual<string>("24", 表示文字列);
}
void 表示(string 表示文字列)
{
this.表示文字列 = 表示文字列;
}
}
}
|
|
電卓のテストのソース・コード(C#) |
namespace 電卓Lib
{
public class 電卓
{
public const int 最大表示文字列長 = 10;
public delegate void 表示ハンドラ(string 表示文字列);
public event 表示ハンドラ 表示更新;
string display = "0";
string 被演算 = null;
bool 演算リセット済み = false;
public string 表示
{
get { return display; }
set
{
if (value.Length <= 最大表示文字列長 && value != display)
{
display = value;
if (表示更新 != null)
表示更新(display);
}
}
}
public void 数のキーを押す(int 数)
{ 数の追加(数); }
public void 全クリアキーを押す()
{
クリアキーを押す();
被演算 = null;
演算リセット済み = false;
}
public void クリアキーを押す()
{ 表示 = "0"; }
public void 足すキーを押す()
{
イコールキーを押す();
被演算 = 表示;
}
public void イコールキーを押す()
{
if (被演算 != null)
{
表示 = 合計(被演算, 表示);
被演算 = null;
}
演算リセット済み = true;
}
string 合計(string 被演算数, string 演算数)
{ return (int.Parse(被演算数) + int.Parse(演算数)).ToString(); }
void 数の追加(int 数)
{
if (演算リセット済み)
{
表示 = 数を表す文字列の正規化(数.ToString());
演算リセット済み = false;
}
else
{
表示= 数を表す文字列の正規化(表示 + 数.ToString());
}
}
static string 数を表す文字列の正規化(string displayText)
{
int zeroNumber = 0;
for (int index = 0; index + 1 < displayText.Length; index++)
{
if (displayText[0] == '0')
zeroNumber++;
}
return (zeroNumber > 0) ? displayText.Substring(zeroNumber)
: displayText;
}
}
}
|
|
テストによって開発が駆動された電卓のソース・コード(C#) |
|