2011年2月22日火曜日

NUnitFormsの開発環境構築(その1)

NUnitFormsの開発環境構築(その1)
(今回と次回に渡り2パターンのソースコードの書き方をメモしておく)

NUnitだと画面を使用しない単体テストだけのテストになってしまう。
これを使うと、画面を表示しての自動テストができるようになる。


・VisualStudio
使用バージョン:2005 Standard Edition


・NUnitForms
使用バージョン:不明(多分、.Net 2.0 NUnitForms alpha 5 release でいけるはず)
バージョン別ファイルが細かく存在するサイトでダウンしたので覚えてないしファイルにも書いてない
ダウンロードサイト:http://www.nunit.org/download.html
VS2005でプロジェクトが作成してあり、.NET2.0で動くNUnitFormsじゃないとまともに動かない。
なので、バージョンは2006年頃の古いものとなる。


・インストール手順
圧縮ファイルをダウンロード後、任意の場所に解凍。


・設定方法
1、解凍したフォルダを見るとソリューションファイルがあるので起動。
2、ビルドする。
3、できたNUnitFormsのDLLとそこに同伴されているNUnitのDLLを任意の場所に移す。最初にインストールしてあったNUnit-GUIのNUnit.framework.dllとはバージョンが違うので不整合を起しエラーが出て動かなくなるので、必ずNUnitFormsフォルダにあるNUnitForms用DLLとNUnit用DLLの2つをセットで使う事。後、ファイルは移さなくてもいいが管理しやすいように"Program Files"の下に専用フォルダを作った。
4、NUnitテストプロジェクトで参照設定した方法は使わない。プロジェクトの「参照の追加」からNUnitFormsと対になっているNUnitのDLLを追加する。間違っても.NETタブから選ばない事。

・NUnitFormsの使用例
[作成手順]
1、NUnitテストコードが書けるように設定しておく。
2、テストコードのImportsに「NUnit.Extensions.Forms」を追加する。
3、NUnitForms用のテストコードを書く
    (いつものようにテストメソッドは全部Publicにする)
    (画面は一つしか使用せず、画面遷移もしない)
    何かフォームを作成する













    主に使用するパーツのプロパティ
    [画面タイトル]
        Name:LoginForm
        Text:ログイン画面
    [テキストボックス]
        Name:txtUserName
        MaxLength:12
        Text:(空)
    [テキストボックス]
        Name:txtPassword
        MaxLength:16
        PassWordChar:*
        Text:(空)
    [ボタン]
        Name:btnLogin
        Text:ログイン
    [ボタン]
        Name:Button2
        Text:キャンセル
    [ラベル]
        Name:lblErrorMessage
        Text:(空)
        Visible:False









・ソリューション構成
 今回はプロジェクトを分けずに作った












・ソースコード
「LoginForm.vb」
Public Class LoginForm
    Private Sub LoginForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        lblErrorMessage.Visible = False
    End Sub


    Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click
        lblErrorMessage.Visible = False
        If txtUserName.Text = "" Then
            lblErrorMessage.Visible = True
            lblErrorMessage.Text = "ユーザー名を入力してください。"
            Exit Sub
        End If
        If txtPassword.Text = "" Then
            lblErrorMessage.Visible = True
            lblErrorMessage.Text = "パスワードを入力してください。"
            Exit Sub
        End If
    End Sub
End Class

「LoginFormTest.vb」
Imports System
Imports System.Windows.Forms
Imports NUnit.Framework
Imports NUnit.Extensions.Forms
<TestFixture()> _
Public Class LoginFormTest
    Inherits NUnitFormTest ' NUnitFormTestクラスからの継承


    Dim loginForm As Form


    Public Overrides Sub Setup()
        MyBase.Setup()
        loginForm = New LoginForm()
        loginForm.Show()
    End Sub


    Public Overrides Sub TearDown()
        loginForm.Close()
        MyBase.TearDown()
    End Sub


    Public Overrides ReadOnly Property UseHidden() As Boolean
        Get
            Return False
        End Get
    End Property


    <[Test]()> _
    Public Sub ログインフォームのタイトル表示()
        Dim loginFormTester As FormTester = New FormTester("LoginForm")
        Assert.AreEqual("ログイン画面", loginFormTester.Text)
    End Sub


    <[Test]()> _
    Public Sub ユーザー名テキストボックスに設定されるべき値()
        Dim userNameTester As TextBoxTester = New TextBoxTester("txtUserName")
        Assert.AreEqual(String.Empty, userNameTester.Text)
        Assert.AreEqual(12, userNameTester("MaxLength"))
    End Sub


    <[Test]()> _
    Public Sub パスワードテキストボックスに設定されるべき値()
        Dim passwordTester As TextBoxTester = New TextBoxTester("txtPassword")
        Assert.AreEqual(String.Empty, passwordTester.Text)
        Assert.AreEqual(16, passwordTester("MaxLength"))
        Assert.AreEqual(Char.Parse("*"), passwordTester("PasswordChar"))
    End Sub


    <[Test]()> _
    Public Sub エラーメッセージラベルに設定されるべき値()
        Dim errorMessageLabelTester As LabelTester = New LabelTester("lblErrorMessage")
        Assert.IsFalse(CBool(errorMessageLabelTester("Visible")))
    End Sub


    <[Test]()> _
    Public Sub ユーザー名を入力しないとログインできない()
        Dim loginButtonTester As ButtonTester = New ButtonTester("btnLogin")
        loginButtonTester.Click()
        Dim errorMessageLabelTester As LabelTester = New LabelTester("lblErrorMessage")
        Assert.IsTrue(CBool(errorMessageLabelTester("Visible")))
        Assert.AreEqual("ユーザー名を入力してください。", errorMessageLabelTester.Text)
    End Sub


    <[Test]()> _
     Public Sub パスワードも入力しないとログインできない()
        Dim userNameTester As TextBoxTester = New TextBoxTester("txtUserName")
        Keyboard.UseOn(userNameTester)
        Keyboard.Click(Key.U)
        Keyboard.Click(Key.S)
        Keyboard.Click(Key.E)
        Keyboard.Click(Key.R)
        Keyboard.Click(Key.DIGIT_1)
        Dim loginButtonTester As ButtonTester = New ButtonTester("btnLogin")
        loginButtonTester.Click()
        Dim errorMessageLabelTester As LabelTester = New LabelTester("lblErrorMessage")
        Assert.IsTrue(CBool(errorMessageLabelTester("Visible")))
        Assert.AreEqual("パスワードを入力してください。", errorMessageLabelTester.Text)
    End Sub
End Class

・参考URL
http://nunitforms.sourceforge.net/
http://www.atmarkit.co.jp/fdotnet/nagile/nagile03/nagile03_02.html
http://jinblog.at.webry.info/201003/article_2.html
http://jinblog.at.webry.info/201003/article_1.html
http://jinblog.at.webry.info/201003/article_3.html
http://blogs.yahoo.co.jp/dk521123/21717521.html


   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
  にほんブログ村

0 件のコメント: