oinume journal

Scratchpad of what I learned

Revel Frameworkでのテスト

今使っている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 revel-sample AppTest.TestThatIndexPageWorks

引数に <TestSuite名>.<Test関数名> という形式で渡せばそのテスト関数だけ実行される

テスト時のサーバー側のログをあとで確認したい

test-results/app.log にログファイルあるよ!

Mastering Concurrency in Go

Mastering Concurrency in Go