メッセージボックスのテスト(Windows.Forms)
先々週末に腰を怪我して自宅療養中のmasakitkです。
そういえばメッセージボックスのテストについては、一部分だけを追記しただけで、NUnitFormTestを継承してる部分とか何も説明していなかったので、http://d.hatena.ne.jp/masakitk/20111218/1324234876で作ったgithubリポジトリにテストを追加しました。
ちょっとテストもリファクタしてます。
テストコードはこんな感じになりました。
using System.Windows.Forms; using NUnit.Extensions.Forms; using NUnit.Framework; using TddFizzBuzz; namespace TddFizzBuzzTest { [TestFixture] public class TddFizzBuzzTest : NUnitFormTest { [Test] public void Test01_10までのFizzBuzz結果の確認() { var target = new FizzBuzzForm(); target.Show(); new TextBoxTester("maxNumberTextBox", target).Enter("10"); new ButtonTester("fizzBuzzButton", target).Click(); var dataGrid = new Finder<DataGridView>("fizzBuzzDataGridView", target).Find(); var expectedList = new[] { new { Number = 1, Text = "1" }, new { Number = 2, Text = "2" }, new { Number = 3, Text = "Fizz" }, new { Number = 4, Text = "4" }, new { Number = 5, Text = "Buzz" }, new { Number = 6, Text = "Fizz" }, new { Number = 7, Text = "7" }, new { Number = 8, Text = "8" }, new { Number = 9, Text = "Fizz" }, new { Number = 10, Text = "Buzz" }, }; foreach (var expected in expectedList) AssertForOneRow(dataGrid, expected.Number, expected.Text); } [Test] public void Test02_数値以外の入力時をチェックしているか() { バリデーションメッセージ確認("aaa", "1以上の数値を入力してください。"); バリデーションメッセージ確認("01a", "1以上の数値を入力してください。"); } [Test] public void Test03_0以下の入力時をチェックしているか() { バリデーションメッセージ確認("0", "1以上の数値を入力してください。"); バリデーションメッセージ確認("-3", "1以上の数値を入力してください。"); } private void バリデーションメッセージ確認(string text, string message) { var target = new FizzBuzzForm(); target.Show(); DialogBoxHandler = (title, handle) => { var messageBox = new MessageBoxTester(handle); Assert.That(messageBox.Text, Is.EqualTo(message)); messageBox.ClickOk(); }; new TextBoxTester("maxNumberTextBox", target).Enter(text); new ButtonTester("fizzBuzzButton", target).Click(); } private static void AssertForOneRow(DataGridView dataGrid, int rowIndex, string expected) { Assert.That(dataGrid["FizzBuzzValue", ToZeroBased(rowIndex)].Value, Is.EqualTo(expected)); } private static int ToZeroBased(int rowIndex) { return rowIndex - 1; } } }
デブサミも1日半参加したんだけど、まだレポート書いてないや。
(一応メモとったノートが会社にあるからという言い訳)
Jenkins勉強会は補欠から繰り上がったけど腰の怪我のため参加できず。