2011-10-26 6 views
0

私はレストラン/ホテル/その他の特別な取引があるかどうかを分類するための分類器を書いています...これは外部サイトを分析するためのWebクローラーの一部です。 私は食事をしましたか?()メソッドは、テキストを受け取り、そのテキストが食事に関する取引だと考えるならtrueを返します。単純なキーワードマッチングだけが使用されるので、100%正確にすることはできません。例がある階級階級のテスト

def meal?(text) 
    !text.match(/restaurant|meal|wine|.../i).nil? 
end 

今、私はそれのためのテストを書いており、2つの質問があります。最初の1つは、ユニットテストでこれらのキーワードのすべてを再度リストするのは少し冗長だと思うということです。どう思いますか?

2番目の質問: ソース管理に.htmlファイルがあります。これは、クローラの解析機能をテストするために使用されます。理論的にはすべての項目が合格するはずですので、この分類テストでそのhtmlを使用し、そのhtmlを解析して、各取引の説明をこのメソッドにフィードします。

1つの欠点は、.htmlが外部サイトから取得されていることです。サイトがレイアウトを変更すると、この.htmlファイルが更新されます。この分類テストも変更する必要があります。しかし、これは大丈夫だと思います。

これはお勧めですか?私はこの方法を考えました。なぜなら、その.htmlから情報を抜き出して不安を感じ、それをテストスクリプトそのものに置く(DRYではなく、テストスクリプトをかなり大きくする)からです。解析された記述を与えることは、「これは開発者から必要な詳細を隠す」や「これはレポートを生成することができない」のような基本的なテスト法に違反しますか?

答えて

0

私は明らかにこの質問を誤解していますので、私はこの回答を完全に改訂します。

個人的には、実際のテキストをhtmlファイルから取り出して、htmlファイルを読み込む間接的ではなくテストにコピー&ペーストする方が簡単だと思います。私が見つけることができる2つの理由...

  • ユニットテストの書き込み/読み込み時には、私が必要とするリソースファイルのような「外部ソース」ではなく、すべての情報が私の目の前にあることが好ましいのために掘る。個人的な好み。
  • htmlファイルからテキストを読み込んで分類するだけでなく、このメソッドを他のものにも使用できるので、少し混乱します。より一般的なものにするために、実際のテストでは生のテキストを使用します。
  • あなたがしようとしていることが本当に悪い理由を見つけることはできません。私はそれが個人的な好みにまでこだわると思います。

    +0

    おかげさまで、私のテストでは、関連する段落を取り出し、それぞれに機能(文字列を受け入れる)を分類する段階を設定しています。 私はそれについて気に入らない唯一のことは、パラグラフは本当に長くなり、画面全体をカバーできるということです。しかし特別なケースです。 – lulalala