2012-05-04 7 views
3

私はデータベースからフォーム定義を取得し、フォーム定義に従ってhtml、javascript、cssをレンダリングするJavaクラスを持っています。その多くは "appendable.append(...)。append(...)"をエラーが発生しやすいhtmlスニペットを作成します。 javascript、css、html要素はすべて(フォーム定義に応じて)動的なので、Jspと一般的なテンプレートフレームワーク(eg.FreeMarker)はオプションではありません。何らかの理由で、GWTも選択肢ではありません。htmlとcssを動的にレンダリングするJavaコードの単体テスト方法は?

このレンダラーを単体テストする直接的な方法は、予想されるhtmlコードをハードコードし、実際の出力と比較することですが、テストは非常に脆弱です。

この種のhtmlレンダラーを単体テストするにはどうすればよいですか?

ありがとうございます。

+1

のいずれか一方を使用してテストを飾ることになるでしょう(あなたはしかし、これらの期待される結果をテキストファイルに入れたいのですが、Javaソースではありません)。出力の「意味」に合致するコードを記述しようとすると、エラーが発生しやすく、困難で時間がかかることになります。テストを多く更新する必要があるかもしれませんが、何か変化があった場合には、少なくともアラートとレビューを受ける機会があります。スニペットを可能な限り小さくして、関係のないものが出力されないようにしてください。 – Thilo

答えて

3

予想されるHTML値をハードコードすると、テストが脆くなる可能性がありますが、おそらくほとんどのバグがキャッチされます。もう1つの方法は、HTML出力に特定のキーまたは重要なタグが存在するかどうかをチェックすることです。このアプローチははるかに柔軟ですが、いくつかのバグを見逃す可能性があります。どちらを使用するかを決めるには、HTML構造がどのくらいの頻度で変更されるかを検討します。

ここに打たれるバランスがあります。あなたのテストがより具体的であれば、それは最も脆いでしょう。しかし、あなたが十分に具体的でない場合、あなたのテストはバグを捕らえることはありません。どのように具体的であるかの感覚を養うことが実践されます。

しかし、一般的には、脆性試験は非常に危険なので、おそらく「大きな悪」です。テストで誤検出が多い場合、無視するようになり、無駄になります。キータグの存在を確認することをお勧めします。

+0

あなたのご意見をお寄せいただきありがとうございます。私はJsoupを使ってhtmlを生成し、テストすることにしました1。htmlのマークアップの有効性; 2. dom構造; 3.特定のタグ/ノードは、期待される属性と値で表示されます。 JsoupのCSSセレクタ機能は、これらのテストを非常に簡単にします。 –

+0

@JayHuang great!がんばろう。 :) – Oleksi

2

私は2つの方法を採用します。まず、生成している個々のスニペットを確認する必要があります。テストでは、これらのコンポーネントが期待通りに機能することを検証する必要があります。第2に、全体として生成された各文書が有効であり、そのタイプについて一貫していることを検証する必要があります。この検証を実行するサードパーティのツールがあります。いくつかの例については、http://www.w3.org/QA/Tools/を参照してください。

0

あなたが比較したアプローチは良いアプローチです。これはテストの「ゴールデンマスター」アプローチと呼ばれています。これを行うためのJUnitで動作検証ライブラリーがある

は、それが大幅に承認と呼ばれるプロセスがhttp://www.approvaltests.com

また、これはあなたの結果および/またはあなたの黄金を開きます記者を使用することにより、脆性に対する保護の手助けをテスト簡素化差し迫ったレポーターかウェブブラウザーのいずれかでマスターしてください。

あなたが探しているコールは、次のとおりです。

Approvals.VerifyHtml(yourHtml) 

、あなたは私がハードコーディング期待されるHTML出力は、合理的なアプローチだと思う

@UseReporter(DiffReporter.class) 
@UseReporter(FileLauncherReporter.class) 
@UseReporter({DiffReporter.class, FileLauncherReporter.class}) 
関連する問題