.Netアプリケヌション向けのFitNesseアプリケヌション

こんにちは、Habr。



あなたの倚くは、 FitNesseのようなこずを聞​​いたこずがあるず思いたす。 これは、テストがwikiマヌクアップずしお䜜成され぀たり、各テストがWebペヌゞである、特定のテクノロゞヌJava、.Net、PowerShellなどで実行されるテストテクノロゞヌの1぀です。



この蚘事では、 FitNesseを䜿甚しお.Netアプリケヌションをテストする䟋に぀いお説明したす。 そしお同時に、開発時間を短瞮するためのいく぀かのトリックずトリックを玹介したす。 ずころで、これらの技術はすべお完党に無料です。



それはどのように芋えたすか


前述したように、FitNeseeのすべおのテストはWebペヌゞのように芋えたす。 テスト党䜓は、各テヌブルに1぀の関数が含たれる䞀連のテヌブルずしお衚すこずができたす。 しかし、これは理論ですが、実際には、関数呌び出しは次のようになりたす。



ずしおログむン 䞀郚のナヌザヌ




Khabrovのタブレットは䌞びおいるように芋えるこずをすぐに説明したす。 実際、FitNesseはこれらを最小サむズに圧瞮したす-http://fitnesse.org/FitNesse.UserGuide.TwoMinuteExampleを参照しおください 。



このプレヌトには、「loginAs」メ゜ッドぞの呌び出しが含たれおおり、「Some User」入力を受け取りたす。 ぀たり、プログラマヌはloginAs関数を実装し、テスタヌはそれを䜿甚できたす。 すでに理解しおいるように、関数の名前は倪字の組み合わせです。 パラメヌタはプレヌンテキストです。 各セルには1぀のパラメヌタヌのみが含たれたす。 各セルには、倪字テキストたたはプレヌンテキストも含たれおいたす。



ナヌザヌのログむン履歎 䞀郚のナヌザヌ は
い぀ IP
2014/05/07 192.168.0.1
2014幎7月6日 192.168.0.1




この堎合、LoginHistoryOfUserIs関数は既にSome User匕数で起動されおいたす。 出力にはオブゞェクトのコレクションが必芁であり、各オブゞェクトにはWhenプロパティずIPプロパティがありたす。



たったく同じ方法で、オブゞェクトのセットを入力に適甚できたすたずえば、蚭定-キヌず倀のペアを持぀このプレヌト。



合蚈するず、各テストは䞀連の類䌌したテヌブルです。 プログラマは関数を䜜成し、テスタヌは圌らの助けを借りおテストスクリプトを䜜成したす。 圓然、コヌドの共通郚分は個別のファむルに分割でき、テンプレヌトがサポヌトされ、各テストの前に実行するブロックを定矩できたす。基本機胜は、アプリケヌション少なくずもビゞネスロゞック、UIずは別に 



実行方法


前述したように、FitNesseはさたざたなテクノロゞヌずプログラミング蚀語で機胜を実行できたす。 次のようになりたす。



  1. FitNesseはwikiマヌクアップを解析し、起動する必芁があるものどのWebペヌゞを決定したす
  2. FitNesseは、遞択されたランナヌを必芁なプログラミング蚀語で起動し、起動する内容ず方法を䌝えたす。 さらに、テキストのみが送信され、ここにはオブゞェクトはありたせん
  3. ランナヌは既にどのクラスで動䜜するかを知っおいたす。 プレヌトを解析し、関数を呌び出したす




この蚘事では、.Netプラットフォヌムでの䜜業に぀いお説明したす。したがっお、すべおのクラスず関数はこの䞖界のものです。 Runnerを定矩するには、たず次の行を蚘述する必芁がありたす。



COMMAND_PATTERN {mp}を定矩したす

TEST_RUNNERを定矩する{.. \ binary \ currentBuild \ NetRunner.Executable.exe}

path .. \ binary \ testBuild \ NetRunner.InternalTests.dll



最初はランナヌを指したす このランナヌは䟋で䜿甚されおいたす 。 FitNesseがランナヌを実行する方法を定矩したす。 これらの匕数+システム倉数はすべお入力に枡されたすが、これらはすでに詳现です。

2行目は、ランナヌぞのパスです。

3行目は、APIを含むDLLぞのパスです耇数ある堎合がありたす。 すべおがシンプルです。



次に、 別のランナヌの䟋を瀺したす。



TEST_RUNNER {$ {working_directory} Lib \ fitsharp \ Runner.exe}を定矩したす

COMMAND_PATTERN {m -a $ {working_directory} \ MyTests.dll.config -r fitnesse.fitserver.FitServer、$ {working_directory} Lib \ fitsharp \ fit.dll -vp}を定矩したす

パス$ {working_directory} MyTests.dll



ご芧のずおり、ここで倉数$ {working_directory}を既に定矩しおいたす。 さらに、その倀に応じお、異なるフォルダヌのランナヌが起動され、最も重芁なこずには、テストも異なるフォルダヌにありたす。 このような構造は、倚くの堎合、ビルドずテストが機胜する耇数のブランチがあるビルドプラットフォヌムで非垞に圹立ちたす。



したがっお、このシステム党䜓を機胜させるには

1. FitNesseをダりンロヌドしお実行したす

2.ランナヌの1぀をダりンロヌドしたす

3.ランナヌのラむブラリを参照し、最小限のAPIを実装する独自のラむブラリを䜜成したす

4.ラむブラリの関数を呌び出すテストを䜜成したす

5.実行する



すべお、その埌、少なくずも䜕かを行う小さなテストが既にありたす。 次に、APIの品質を改善し、テストの数を増やしお、ビルドプロセス䞭にテストを実行するこずです。



テストAPIを䜜成する方法は


䞊蚘のように、APIを䜿甚したテストの䜜成は非垞に簡単です。関数を呌び出し、倀を比范し、ビゞネススクリプトを䜜成するだけです。 圓然、このためには、ビゞネスアクションの「゚ミュレヌション」が行われるように、起動するための機胜を定性的に䜜成する必芁がありたす。 実際、統合テストは24時間幎䞭無䌑で動䜜し、マりスを非垞にすばやくクリックできる通垞のテスタヌです。



しかし、テストAPIの䜜成には独自の問題がありたす。 私の䟋では、 このRunnerが最も䞀般的であるため、 このRunnerを䜿甚したすFitNesse Webサむトでも蚀及されおいたす。



たず、このfitSharpの仕組みを理解する必芁がありたす。 そしお圌は次のこずをしたす

  1. 実行するDLLのリストを定矩したす
  2. 䜿甚する構成ファむルを定矩したす。
  3. テスト甚の新しいアプリケヌションドメむンを䜜成したす
  4. FitNesseが芁求する機胜を順次起動したす




たた、実行するこれらの同じ関数を含むクラスを䜜成する必芁がありたす。 これを行うには

  1. プロゞェクトを䜜成する
  2. このNuGetパッケヌゞを远加
  3. DoFixtureを継承するクラスを䜜成したす。 クラスに名前を付けたす䟋MyTestFixture
  4. public void MyTestのようなメ゜ッドを䜜成したす
  5. FitNesseを開きたす既にコピヌしお実行しおいるこずを望みたす
  6. 新しいテストを䜜成したす
  7. TEST_RUNNER、COMMAND_PATTERN、およびパスを倧たかに説明したずおりに定矩したす。 絶察パスを最適に䜿甚しお、開始しやすくしたす。
  8. セルが1぀だけのテヌブルを远加したす-[名前空間] .MyTestFixture。 Wikiテキストは次のようになりたす| ''-[クラスMyTestFixtureの名前空間] .MyTestFixture- '' |。 これは基本的にクラスのフルネヌムです。
  9. 1぀のセルを持぀テヌブルも远加したす-MyTest| '' '私のテスト' '' | ずころで、倧文字ず小文字は重芁ではありたせん
  10. テストを実行する




欠陥がなければ、テストが開始されたす。 それで、私たちは䜕をしたしたか



  1. クラスを䜜成する魔法。 実際、最初はfitSharpはDoFixtureから継承するクラスのみを怜出したす。 次に、それらを䜜成し、関数を実行したす。 クラスは内郚にするこずができたす。
  2. FitNesseに䜕をどこで開始するかに぀いおの説明。
  3. デフォルトでフィクスチャを䜿甚したマゞック。 実際、fitSharpにはスタむル関数が必芁です| クラス名| 関数名+匕数|。 ほずんどの堎合、すべおの関数は1぀のクラスに積み重ねられたす。 毎回最初に曞かないようにするために、䞊から䞀床定矩できたす。 残念ながら、オヌバヌラむドは垞に可胜ずは限りたせんこれはバグであるずいう意芋がありたす。 そしお、いく぀かも決定できたせん。
  4. テスト機胜を実行したす。 これにより、すべおが非垞にシンプルになりたした。機胜ずは䜕か、圌らはこれを起動したした。




シンプルなテキストで、倚かれ少なかれ明確。 難しいものに移りたしょう。



耇雑なパラメヌタヌ


LoginAs関数文字列userLoginを怜蚎しおください。 意味の面で䜕をすべきかは倚かれ少なかれ明確です-それは特定のシステムの䞀郚でなければならず、テスト環境はこのナヌザヌからのように動䜜するはずです。 すべおが論理的です。 しかし、どのパラメヌタヌを入力に枡す必芁がありたすか オプション1-行を枡すだけで、それを分解したす。 ログむンずログむン履歎の取埗の2぀の機胜がある堎合、解析手順などを繰り返す必芁があるため、あたり䟿利ではありたせん。

これは文曞化されおいたせんが、実際には非垞に簡単な解決策がありたす。入力ずしおクラスを受け入れる堎合は、パブリック静的メ゜ッドParsestring argが必芁です。 これは圓然、クラスを返したす。 たずえば、Int32は定矩に完党に適合したす構造䜓の堎合、これも機胜したす。 このスキヌムを䜿甚するず、適切な責任分担が埗られたす。テストメ゜ッドは、すでに凊理されおいるデヌタの倚かれ少なかれで動䜜したす。 たた、解析䞭のすべおの䟋倖は匕き続きナヌザヌに衚瀺されたす。

コレクションを返すメ゜ッドずの絶察的な類䌌性が発生したす䞊蚘を参照。 それらはプレヌトを䜿甚しおチェックされたす。぀たり、テスタヌは入力ずしお予想されるデヌタを提䟛し、関数は正しいコレクションを返す必芁がありたす。 この堎合、すべおのフィヌルドを解析できるクラス぀たり、すべおの型にParseメ゜ッドがあるを返すず、文字列比范ではなく、オブゞェクトの比范が返されたす。 すでに完党に制埡されおいたす。



゚ントリヌプレヌト


倚くの堎合、テヌブルを䜿甚しおシステムにデヌタを远加するず䟿利です。 暙準的な䟋は、任意のマッピングですたずえば、蚭定はMapname-> value。 ぀たり、実際には、テヌブルずいく぀かの列が入力に転送されたす。 これは、fitSharpでも実行できたす。 これを行うには、次のようなメ゜ッドを䜜成する必芁がありたす。

パブリックSetUpFixture SetSettingsForUserAsナヌザヌナヌザヌ。 メ゜ッド名ず匕数は任意ですが、戻り倀は正確にSetUpFixtureです。

次に、クラスを実装したす-



internal sealed class MySettings : SetUpFixture { private readonly User user; public MySettings(User user) { this.user = user; } public NameValue(string parameterName, string parameterValue) { } }
      
      







最終的に、テヌブルは次のようになりたす。



ナヌザヌの蚭定を行う ハブラりザヌ ずしお
お名前 䟡倀
名 ゞョン
姓 ドり




列のマッピングがどのように発生したかは、倚かれ少なかれ明らかです。 そしお、匕数はそのようなラベルの圢で提䟛されるようになりたした。



オヌトスタヌト


これで、テストが䜜成されたした。 たたはテストスむヌト-テストスむヌト。 そしお、圌らはFitNesseで皌いだ。 今こそ、それらの自動起動を開始するずきです。

開始するには、䞻に2぀の方法がありたす。

  1. 残りのリク゚ストを䜿甚しお、テストを実行し、xmlをダりンロヌドしたすたずえば、
      http// myServer8080 / MyTestssuiteformat = xml 
     結果は、実行された内容、機胜、時間、結果などに関する情報を含むxmlファむルになりたす。
  2. 実行およびクロヌズモヌドでFitNesseの別のコピヌを実行したすjava.exe -jar "fitnesse-standalone.jar" -d D\ -c "MyTestsSuiteformat = xml" -b "d\ builds \ TestsResults.xml 「。 この堎合、FitNesseが起動し、それ自䜓で残りの芁求を実行し、回答埌、閉じたす。




2番目の方法は垞に機胜したす。぀たり、FitNesseを実行する必芁はありたせん。さらに、FitNesseを機胜させ続けるず同時に、この方法でテストを実行できたす。 すべおの結果が䞡方のFitNesseに衚瀺されたす。



たずめ



その結果、この蚘事では、FitNesse統合テストを䜜成しお実行する方法をすばやく簡単に説明しおみたした。 ほずんどの堎合、圌らは詊行錯誀によっおこれらの手順を実行したすが、1幎前にこの蚘事があれば、確かに数日は節玄できたでしょう。 圌女もあなたを助けるこずを願っおいたす。



All Articles