HtmlUnitを使ってファイルダウンロードのテストをする
SeleniumだとExcelやCSVなどのファイルをダウンロードさせるページのテストで、ダウンロードしたファイルの内容を検証することは難しいですが、HtmlUnitを使えばできます。
ファイルのダウンロードというのは、Content-Disposition:attachmentヘッダを返すようなレスポンスです。
HtmlUnitは、実ブラウザを使用するしないエミュレーション方式のWebテスト用のフレームワークです。
こんな感じのコードになります。
import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.attachment.Attachment; import com.gargoylesoftware.htmlunit.attachment.CollectingAttachmentHandler; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class AttachmentTest extends TestCase{ // ファイルをダウンロードするURL priavte static final String URL = "......"; private WebClient client @Override protected void setUp() throws Exception { super.setUp(); client = new WebClient(); } public void testAttachment() throws Exception{ WebClient client = new WebClient(); List<Attachment> list = new ArrayList<Attachment>(); client.setAttachmentHandler(new CollectingAttachmentHandler(list)); // ダウンロードが発生するURLにアクセス Page page = client.getPage(URL); assertEquals(1, list.size()); // ファイル名の検証 assertEquals("foo.csv", list.get(0).getSuggestedFilename()); // ファイル内容の検証 assertEquals("....", list.get(0).getPage().getWebResponse().getContentAsString()); } }
ファイル内容の検証の部分は、Excelなどのバイナリファイルであれば、getContentAsStream()でPOIなどに読ませればよいと思います。内容の検証はサーバ側コードのテストだけで充分かもしれませんが。