質問

のコードは、様式及びデータ内で同じデータベース私は何のためのベストプラクティスをデザインスイートの試験のためのマイクロソフトアクセスを用いたアクセスの2007).

非常に大きな課題の一つであ試験形態ではその数を制御してい hwnd 取扱い、他のコントロールのみんなにフォーカスが当たっては、自動化も不透明でお客さんの一覧を取得し管形法です。

経験す。

役に立ちましたか?

解決

1.記テストコード

まず、書くビジネスロジックにフォームのコードを作ります。ばいいのかわからない場所です。ではできない適切な試験である。実際、本当になっていることをテストするために形態そのものです。この死ダム簡易表示に対応したユーザー相互作用としての代表団の責任に対応する別のクラス テスト容易化.

よろしくお願いします。周知-徹底を自らの Model-View-Controllerパターン 始めてください。

Model View Controller diagram

ではではできません 完全に にVBAにより、いまではイベントやインターフェース、両方ですね。この単純な形式とテキストボックス、ボタンを押します。

simple form with text box and button

のフォームのコードの後ろ、またはテキストボックスの値が、公共財産の再上げは、当社が定めるインターネットます。

Public Event OnSayHello()
Public Event AfterTextUpdate()

Public Property Let Text(value As String)
    Me.TextBox1.value = value
End Property

Public Property Get Text() As String
    Text = Me.TextBox1.value
End Property

Private Sub SayHello_Click()
    RaiseEvent OnSayHello
End Sub

Private Sub TextBox1_AfterUpdate()
    RaiseEvent AfterTextUpdate
End Sub

今後はモデル用することが可能です。ここで私が新しいクラスのモジュールの名前 MyModel.ここにコードい入れなければなりません。りますのでご注意を自然と同様の構造をしています。

Private mText As String
Public Property Let Text(value As String)
    mText = value
End Property

Public Property Get Text() As String
    Text = mText
End Property

Public Function Reversed() As String
    Dim result As String
    Dim length As Long

    length = Len(mText)

    Dim i As Long
    For i = 0 To length - 1
        result = result + Mid(mText, (length - i), 1)
    Next i

    Reversed = result
End Function

Public Sub SayHello()
    MsgBox Reversed()
End Sub

最後に、当社のコントローラーワイヤです。のコントローラーの話を聞くフォームイベントの伝達変化のモデルおよびトリガーモデルのスタートする。

Private WithEvents view As Form_Form1
Private model As MyModel

Public Sub Run()
    Set model = New MyModel
    Set view = New Form_Form1
    view.Visible = True
End Sub

Private Sub view_AfterTextUpdate()
    model.Text = view.Text
End Sub

Private Sub view_OnSayHello()
    model.SayHello
    view.Text = model.Reversed()
End Sub

このコードが実行されるその他のモジュールです。を目的に、この例を使い、標準モジュールになりました。を勧めたいと思いますの構築この自分で、コードエディタツールバーは私を提供します。

Private controller As FormController

Public Sub Run()
    Set controller = New FormController
    controller.Run
End Sub

ということは、そのすべて シンガーソングライターでい実験をしていますか?! 友人で すべ います。しましたが当社コード テスト容易化.の例のようであってもおかしくないかも初めてでもしてみて試験す。この本当に必要な試験の model.ことになるすべてのロジックです。

で、ステップ。

2.選ユニットテスティングフレームワーク

あな多くのオプションです。最枠組みをインストールを必要としCOM Add-ins、たくさんのボイラープレート変な書式では、筆記試験としてのコメント等こんに関わる ルールを守れる方と自分の, ので、この私の回答のない公平なものも試してみようと思い、公正な概要において何が可能です。

  1. AccUnit

    • 作品だけます。
    • 必要としている事実が記試験においても不思議なハイブリッドのコメントとのコードです。(行頭に付けたコメントです。
    • あり グラフィカルインターフェースお書き方不思議な見試験のものです。
    • プロジェクトを見たことがありません更新は2013年より
  2. VBライトユニット どちらともいえない私は個人的には使用します。でなんらかに更新2005年.

  3. xlUnit xlUnitなどが良くない。で無骨、ありがたくさんのボイラープレートのコードです。最高の、最悪の事態において接続されたことを示してい仕事です。うことになる。

  4. ビルの枠組み

    あやのときは、.あるんじゃないでしょうかりほとんどの人はいるもので完全に構成可能ユニットテスティングフレームワークでのネイティブVBAコードです。

  5. Rubberduck VBEトのユニットテスティングフレームワーク
    免責事項:私のパートナーシップフォー♪.

    んとか倒したが、ここは私が好きなのにたくさん。

    • していない商品については、ボイラープレートのコードです。
    • を行頭に付けが可能です。
    • のプロジェクトが活躍しました。
    • 以上の文書によれます。
    • この作品のほとんどの主要オフィスアプリケーションだけでなく、アクセス。
    • では、残念ながら、COM Add-Inでインストールする必要がありますへきます。

3.書き込みが開始さ試験

なので、当社のコードからセクション1.唯一のコードを 本当に に必要な試験の MyModel.Reversed() 機能です。うしょうこの試験は次のようになります.例え用Rubberduckですが、単純な試験に心から感謝するとともに、枠組みます。)

'@TestModule
Private Assert As New Rubberduck.AssertClass

'@TestMethod
Public Sub ReversedReversesCorrectly()

Arrange:
    Dim model As New MyModel
    Const original As String = "Hello"
    Const expected As String = "olleH"
    Dim actual As String

    model.Text = original

Act:
    actual = model.Reversed

Assert:
    Assert.AreEqual expected, actual

End Sub

ガイドラインを書い試験

  1. み試験のひとつです。
  2. 良い試みの失敗がある場合はバグを導入したシステムの要件も変化しています。
  3. 含めないでください外部の依存関係などのデータベースファイルシステム。これらの外部の依存できる試験の失敗の理由で外します。第二に、遅いご試験です。ご試験速度が遅くなることとした。
  4. 使用試験名称を記述するかの試験は試験をします。心配しない場合で取得します。その最も重要なことで表示するようにした。

私の答えは少し長く、遅いものの、今では一人のために書単位試験をVBAコードです。

他のヒント

受けたことを歓迎したノックスカレッジ、デヴィッド応答となります。私の回答のあった彼ら:く 形をする必要のないデバッグ!

と思いるべき専用として使う基本的には、意味グラフィック-インターフェース のみ, とを意味ることをここにする必要はありませんデバッグ!のデバッグの仕事はその限りにおVBAモジュールおよびオブジェクトがたくさん取り扱いも楽になります。

あのコースが同一になろうとする傾向を追加VBAコードの形態および/または、特別の場合のアクセスは、これらの素晴らしい"アップデート後の"変化"のイベントでもあまりお ない 入れる形制御特定のコードのフォームモジュールです。これにさらにメンテナンスおよび改良costy、コードは分割とVBAモジュールおよびフォーム/制御モジュールです。

であるということではありません利用できませんねこ AfterUpdate イベントです!投入するだけで、簡単に標準コードのイベントのようになります:

Private Sub myControl_AfterUpdate()  
    CTLAfterUpdate myControl
    On Error Resume Next
    Eval ("CTLAfterUpdate_MyForm()")
    On Error GoTo 0  
End sub

場所:

  • CTLAfterUpdate 標準的な手順を実行時の制御が更新された形式

  • CTLAfterUpdateMyForm ある特定の手順を実行時の制御を更新しMyForm

私はその2つのモジュールです。最初は

  • utilityFormEvents
    がいっCTLAfterUpdate汎用イベント

二つ目には、

  • MyAppFormEvents
    を含む特定のコードのすべての特定の形態のMyAppの応用 のCTLAfterUpdateMyFormきます。もちろん、CTLAfterUpdateMyForm 存在しない可能性のある場合はありません特定のコードです。その "エラー時"の"履歴書next"...

選択などの一般的な方法をいう。いやぁ、すばらしいですねぇない高いレベルのコードを正常化が意味すると痛みのない保守のコードとします。ときに言っていないことを他の形式に固有のコードでも手段となるモジュールは標準化が進んでおり、その可能性について説明する 自動化:かえるイベントを管理したい項目をフォーム/制御のレベル、定義する一般/特定の手続き用しています。
書の自動化コードだ。
くまでに数日かかる作業もいく。ついての本ソリューションのための最後の2年間であることは明らかである右:私の形が完全に自動的に作成したゼロからの"形表"リンク"制御テーブル".
私はその時に、具体的な手続きの形式をいいます。

コードを正規化しても、MSアクセスなどでも見ることができます。でも本当に価値があるみます。

もう一つの利点の アクセスされCOMの応用 であることを作成することができます .NETアプリケーションの走行試験でのアクセス応用の自動化.これを利用することができ、より強力なテスティングフレームワークなどの 書の自動化を主張する試験に対してアクセスアプリです。

そのため、ご堪能いずれかにC#アプリケーションVB.NET 合のような途できます簡単に作性試験のバスアプリです。

がられるのは、非常に古い答え:

はありま AccUnit, 専門ユニットテストの枠組みのためのMicrosoftます。

また、ページの Pythonのdoctest コンセプトやDoctestを実施手順でアクセスVBA.このことは明らかであるフルブユニット-試験溶液とする。まだまだ比較的若いものかどうか疑問を持つも働いてきたすべてのバグだと思うので十分に成熟してリリースしました。

でコピーを次のコードの標準コードモジュールを押しF5内のサブでアクション:

'>>> 1 + 1
'2
'>>> 3 - 1
'0
Sub DocTests()
Dim Comp As Object, i As Long, CM As Object
Dim Expr As String, ExpectedResult As Variant, TestsPassed As Long, TestsFailed As Long
Dim Evaluation As Variant
    For Each Comp In Application.VBE.ActiveVBProject.VBComponents
        Set CM = Comp.CodeModule
        For i = 1 To CM.CountOfLines
            If Left(Trim(CM.Lines(i, 1)), 4) = "'>>>" Then
                Expr = Trim(Mid(CM.Lines(i, 1), 5))
                On Error Resume Next
                Evaluation = Eval(Expr)
                If Err.Number = 2425 And Comp.Type <> 1 Then
                    'The expression you entered has a function name that ''  can't find.
                    'This is not surprising because we are not in a standard code module (Comp.Type <> 1).
                    'So we will just ignore it.
                    GoTo NextLine
                ElseIf Err.Number <> 0 Then
                    Debug.Print Err.Number, Err.Description, Expr
                    GoTo NextLine
                End If
                On Error GoTo 0
                ExpectedResult = Trim(Mid(CM.Lines(i + 1, 1), InStr(CM.Lines(i + 1, 1), "'") + 1))
                Select Case ExpectedResult
                Case "True": ExpectedResult = True
                Case "False": ExpectedResult = False
                Case "Null": ExpectedResult = Null
                End Select
                Select Case TypeName(Evaluation)
                Case "Long", "Integer", "Short", "Byte", "Single", "Double", "Decimal", "Currency"
                    ExpectedResult = Eval(ExpectedResult)
                Case "Date"
                    If IsDate(ExpectedResult) Then ExpectedResult = CDate(ExpectedResult)
                End Select
                If (Evaluation = ExpectedResult) Then
                    TestsPassed = TestsPassed + 1
                ElseIf (IsNull(Evaluation) And IsNull(ExpectedResult)) Then
                    TestsPassed = TestsPassed + 1
                Else
                    Debug.Print Comp.Name; ": "; Expr; " evaluates to: "; Evaluation; " Expected: "; ExpectedResult
                    TestsFailed = TestsFailed + 1
                End If
            End If
NextLine:
        Next i
    Next Comp
    Debug.Print "Tests passed: "; TestsPassed; " of "; TestsPassed + TestsFailed
End Sub

コピー、貼り付け、上記のコードからモジュールの名前Module1利回り:

Module: 3 - 1 evaluates to:  2  Expected:  0 
Tests passed:  1  of  2

数項目:

  • この依存関係(内からのアクセス)
  • これまでの Eval する機能にアクセス。アプリケーションオブジェクトモデルことを意味していま 利用することのアクセスで必要と作成。アプリケーションオブジェクトは、完全予選の Eval 電話
  • があり 特殊性を伴う Eval 意識する
  • で使用することはでき戻す関数の結果とその単線

その制限を、いくつかでもビットのバー。

編集:ここでは、簡単な機能"doctestルール"の機能を満たす必要があ.

Public Function AddTwoValues(ByVal p1 As Variant, _
        ByVal p2 As Variant) As Variant
'>>> AddTwoValues(1,1)
'2
'>>> AddTwoValues(1,1) = 1
'False
'>>> AddTwoValues(1,Null)
'Null
'>>> IsError(AddTwoValues(1,"foo"))
'True

On Error GoTo ErrorHandler

    AddTwoValues = p1 + p2

ExitHere:
    On Error GoTo 0
    Exit Function

ErrorHandler:
    AddTwoValues = CVErr(Err.Number)
    GoTo ExitHere
End Function

私はデザインへの応用としてできる限りの仕事でクエリーやサブルーチンで試験できるのpopulating試験データベース、セットの生産お問い合わせのvbaを対象にデータベースとしての出力との比較かどうかを確認するために出力が良いです。このアプローチな試験のGUI明らかにするもの充実の試験の試験スクリプト(ここでのような資料を、wordドキュメントという開かれた1日をクリックし制御1)を手動で実行されます。

にもよりますプロジェクトの範囲としてのレベルの自動化に必要な試験です。

ご興味があ試験へのアクセスに応用できるものとしてより詳細のレベルを具体的には、VBAコード自体を VBライトユニット は単体テストの枠組みのことです。

といった比較的少数の機会のためのユニット試験は私の願います。多くのコードを書いてい相互作用するテーブルデータまたは出願システムが根本的には難しいユニットテストです。早くからうるアプローチと同じ嘲笑う(なりすましの立場に立って作成されるコードがオプションパラメータとします。パラメータが使用され、その後の手続を利用するパラメータの代わりに取得データからのデータベースです。ではなかなか簡単にセットアップできるユーザ定義型と同じ分野の種類として、列のデータを作る機能です。って多種多様なレストランがたくさんの試験データを入手続きをしていきたい。内部手順がありましたコードに差し替えて実際のデータソースの試験データソースです。これにより使えるようになったのでユニット試験により、幅広く、さまざまな機能を使って、自身のユニット試験機書単位テストは簡単にできるが、繰り返しはつまらない。最終的にまとのユニットテストといたしましたので、お知らせし別のアプローチをしているのだ。

書き込んでインハウスアプリケーションを自分の主な余裕ができますの課題を見いうのではなく、そしてコードです。い場合、その書き用のお客様に、一般的にはお客様には十分認識しなどのソフトウェア開発コストながらやっていく必要がある低コストで多種多様なレストランがたくさん。筆記試験ユニットはすべて書かれており、試験をクリ悪いデータでの手順を参照の場合の手続き適切に取扱います。ユニット試験でも確認する良いデータを適切に取扱います。現在のアプローチに基づく書面の入力の検証の各手順にしたり、アプリケーション内を向上させることにより、フラグに成功時のコードを成功裏に完了しました。各呼び出し手順確認のためのフラグを使用する前に。場合に問題が発生した場合には、報告のようなエラーメッセージを表示します。それぞれの機能の成功のフラグは、戻り値は、エラーメッセージ、コメントする。ユーザ定義型(frのための関数の戻り)のデータを会員とする。いずれの機能の多くの移植のデータメンバーのユーザー定義タイプです。時機能は、通常、成功を返します=true、戻り値が見つかりませんでした。場合は、関数が処理に失敗した場合、返成功=falseの場合、エラーメッセージを表示します。場合はチェーンの機能に失敗した場合、エラーメッセージをdaisyに変更で、結果をいただきありがとうござい読みやすくするために通常のスタックトレース.の起源にも連鎖なんの問題が発生しました。の応用な衝突を正確に報告を示すものでもありません。その結果、地獄にも多くの標準誤差。

Public Function GetOutputFolder(OutputFolder As eOutputFolder) As  FunctRet

        '///Returns a full path when provided with a target folder alias. e.g. 'temp' folder

            Dim fr As FunctRet

            Select Case OutputFolder
            Case 1
                fr.Rtn = "C:\Temp\"
                fr.Success = True
            Case 2
                fr.Rtn = TrailingSlash(Application.CurrentProject.path)
                fr.Success = True
            Case 3
                fr.EM = "Can't set custom paths – not yet implemented"
            Case Else
                fr.EM = "Unrecognised output destination requested"
            End Select

    exitproc:
        GetOutputFolder = fr

    End Function

コードを説明します。eOutputFolderはユーザー定義のEnumとして以下の

Public Enum eOutputFolder
    eDefaultDirectory = 1
    eAppPath = 2
    eCustomPath = 3
End Enum

を使用していEnumのためのパラメータを渡すことができる機能として、このように、特定の既知の選択ができます。Enumsを行頭に付けた場合の入力パラメーター。と思いを提供する初歩的なインタフェース機能です。

'Type FunctRet is used as a generic means of reporting function returns
Public Type  FunctRet
    Success As Long     'Boolean flag for success, boolean not used to avoid nulls
    Rtn As Variant      'Return Value
    EM As String        'Error message
    Cmt As String       'Comments
    Origin As String    'Originating procedure/function
End Type

ユーザー定義のタイプなどFunctRet ーコード補完する役になっています。内での手続きるため、通常店内部の結果を匿名の内部変数(fr)割り当てる前に、その結果を返す変数(GetOutputFolder).この名前の変更手続きは非常に楽しみにしていきます。

その概要について、私の枠組みのms-アクセスする全ての作業VBA.試験は恒久的に記述の手続によるのではなく、開発時間のユニットテストです。実際、コードが速い。私には十分気をつけて最適な低レベルの機能をご利用いただける万回分。また、ご利用でき、コードの生産で開発をおこなっています。エラーが発生した場合には、ユーザー向けのソースとのエラーは通常、自明である。エラー報告の形態は一部のモジュールの層、重要な主体の応募デザイン。さんの負担保持ユニットテストのコードは、本当に重要ながん進化するデザインより符号化とは明らかにconceptualisedデザイン。

あの潜在的課題です。の試験がない自動化し、新たに悪いコードだけが検出されたときに発生されるのです。をコードしないように見えの標準VBAコード(通常、短いほうの期間)とします。ただし、同アプローチの強みがあります。であることができることを利用はエラーハンドラだけでログインエラーとして、ユーザーは、通常、お問い合わせい意味のあるエラーメッセージを表示します。にも対応手順の外部データです。JavaScriptを思わせるVBA、そのような当サイトでは、以下のブラウザの土地の枠組みやVBA ms-アクセスがいません。

数日後、このポストした。 記CodeProject このあいまいいたします。第抜取り扱いの例外やエラー。私が示唆されている上記のような例外処理する。

いうことができる 公開アクセス形式のデータとしてアクセスページのようなものsharepoint または てウェブページ して利用するツールなど セレン のブラウザーテストを行っております。

これは明らかではないとして理想としてのコードで直接ユニット試験で取得しいのです。幸運

アクセスがCOM願います。カレンダー、エディターはWindows APIに含まれています。試います。

のための試験環境でのアクセス申請はます。全てのフォーム/レポート/テーブルやコード/問合せをご用意あるスクリプト言語と類似MS試験Okなのか覚えていMS試験、あるいはデータベース環境を保持試験スクリプトおよび試験結果のスキルを構築しますここでは全て月額の料金とします。

あるいはんな記の集中型のエラー処となります。きaddins可能にする迅速に機能/サブ孔のために追加の行番号を使用していMZ-工具).送信のすべての誤差は単一の機能がログインすることができます。またその後の休憩にすべての誤差の設定により単一休み。

データページにアクセスして推奨されていませんMSによるものとなっていたのがうるさかったの依存のウィジェットに搭載することで、ただの家のみがひどくします。

このアクセス制御できるフォーカスを取得するだけでウィンドウの取扱いにフォーカスとそうでないフォーカスを取得するなど、ラベル、いウィンドウ取扱いるのです。このアクセスを単独不適切なウィンドウハンドル駆動試験が重要です。

実際に、疑問に思ったのはなぜだいたいこのような試験です。でっていくとの基本的な極端なロゴのない全ての原則及び慣行のXPに対応することができ、仕事のアクセスアプリケーションスクエアペッグ、。

なので、一歩だが何をしようとしているこの達成を検討する必要があり活用の完全に異なる方法によるアプローチでしかできない仕事です。

かのような自動化試験で有効な全てのも有用なアクセス。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top