今使っているRevel Frameworkのテストについてまとめてみた。
デモ
サンプル https://github.com/oinume/revel-sample
テストの実行(ブラウザー経由)
revel run revel-sample
http://localhost:9000/@tests にアクセス
テストの実行(CUI)
revel test revel-sample
TestSuite
type AppTest struct { revel.TestSuite }
revel.TestSuiteを埋め込んで使うと、コイツが持っている各種関数が使えるようになる。
- t.Get(PATH)
- t.AssertOk()
- t.AssertContentType
- etc...
type AppTest struct { revel.TestSuite } func (t *AppTest) Before() { //println("Set up") } // Test function must start with 'Test' func (t AppTest) TestThatIndexPageWorks() { t.Get("/") t.AssertOk() // Check HTTP status is 200 t.AssertContentType("text/plain; charset=utf-8") t.AssertContains("Hello world") } func (t *AppTest) After() { //println("Tear down") }
Before/After
- テスト関数を実行する前/後に呼び出される。
- テスト関数が呼び出されるたびに呼ばれるので、テストで使うデータのリセットなどを行う用途に使う。
どういうモデルで動作しているか?
TestSuite(HTTP Client) --> Revel app (Server)
revel test を実行すると裏でサーバーが立ち上がって、TestSuiteがクライアントとしてHTTPリクエストを投げてる。
厳密には...
- revel test
- http://localhost:9000/@tests.list からTestSuiteのリストを取得
- TestSuite実行
- TestSuite(HTTP Client) --> Revel app (Server)
- 結果をコマンドラインに表示
となっている。
よくある質問
特定のテストだけ実行したい
$ revel test revel-sample AppTest.TestThatIndexPageWorks
引数に <TestSuite名>.<Test関数名> という形式で渡せばそのテスト関数だけ実行される
テスト時のサーバー側のログをあとで確認したい
test-results/app.log にログファイルあるよ!
- 作者: Nathan Kozyra
- 出版社/メーカー: Packt Publishing
- 発売日: 2014/07/23
- メディア: Kindle版
- この商品を含むブログを見る