2014年2月14日金曜日

SpockでPandocをCharacterization Testする

SpockでPandocのCharacterization Testを行う手順は、以下の通り。なお、Characterization Testとは、テストが用意されていないソースコードに対して、現状の挙動をそのまま記録するテストのこと(もちろん、Pandocは例として使用しているだけで、Pandoc自体がテストされていないという意味ではない)。詳細は、『Working Effectively with Legacy Code Chapter 13』を参照。

 

前提

 

手順

まずは、Markdownで書かれた、以下のファイル(header.md)を用意する。
#Header Test
次に、Spockのテストを用意する。


このテストでは、PandocでMarkdownファイルをHTMLファイルに変換し、そのHTMLファイルの内容をテストしている。期待値が空文字になっているため、当然このテストは失敗する。
Condition not satisfied:

"" == result
   |  |
   |  <h1 id="header-test">Header Test</h1>
   false
   39 differences (0% similarity)
   (--------------------------------------~-~)
   (<h1 id="header-test">Header Test</h1>\r\n)

    at HeaderSpec.header characterization test(HeaderSpec.groovy:10)
実際の変換結果はheader.htmlに出力されているので、その内容をテストコードに反映する。


再度テストを実行すると、成功するはずのテストが、まだ失敗する。
Condition not satisfied:

"""<h1 id="header-test">Header Test</h1> //""" == result
                                               |  |
                                               |  <h1 id="header-test">Header Test</h1>
                                               false
                                               3 differences (92% similarity)
                                               <h1 id="header-test">Header Test</h1>(-~)\n(//)
                                               <h1 id="header-test">Header Test</h1>(\r)\n(--)

    at HeaderSpec.header characterization test(HeaderSpec.groovy:10)
どうも、期待値と検証値で改行コードが異なるのが原因らしい。期待値と検証値それぞれでnormalizeメソッドを実行して、改行コードの違いを吸収する。


上記の修正後、再度テストを実行すると、無事テストが成功する。

0 件のコメント:

コメントを投稿