2017-05-17 4 views
1

現在、revelプロジェクトで作業しており、テストの数はすでに手に入らなくなっています。 ディレクトリの下にいくつかのパッケージを作成してコントローラテストとモデルテストなどを分離したいと考えています(tests/controllers/tests/models/など)。revelテストをサブパッケージに編成する

これを実行すると、revel testコマンドはこれらのファイルの表示を停止します。

私は...で私のテストコマンドを追跡するためのオンライン勧告を見つけましたが、私がこれを行うと私のプロジェクトをインポートできなかったというエラーが表示されます。

すべてのテストファイルはtestsディレクトリ内にある必要がありますか?可能であれば、サブパッケージでどのようにテストを実行しますか?

+0

ユニットテストは同じパッケージ内になければなりません。これは同じディレクトリを意味します。ブラックボックステストは別のディレクトリからのみ実行できます。 – JimB

+0

それは私が恐れていたことです、情報のおかげで。 – Camway

答えて

0

テスト自体をインポート可能なパッケージ(つまり_test.goファイルではありません)に移動してから、2回使用することができます。あなたは物事がgo testコマンドライン引数と仲良くすることができますTB.Runを使用

package subdir_test 

import "github.com/blah/project/parent/subdir/tests" 

func TestPackage(t *testing.T) { 
    tests.Run(t) 
} 

package tests // subdir 

import "testing" 

func Run(t *testing.T) { 
    for _, test := range testCases { // or whatever 
     test.Run(t) 
    } 
} 

そしてもちろん、親ディレクトリがちょうど彼らの子ディレクトリを呼び出すことができますが、サブディレクトリ内_test.goファイルは、のようなものにすることができます'Run方法:

package parent_test 

import (
    "testing" 
    p "github.com/blah/project/parent/tests" 
    s "github.com/blah/project/parent/subdir/tests" 
) 

func TestPackage(t *testing.T) { 
    p.Run(t) 
} 

func TestSubPackages(t *testing.T) { 
    s.Run(t) 
} 

私は回避することをお勧めしますv多くのツーリングのようなものは、実際にはうまく処理する準備ができていません(たとえば、カバレッジで実行すると単一のレポートが生成され、大規模なプロジェクトでは複雑になりません。また、必ずしも意味をなさない可能性がある)

+0

これはどのようにrevel内部で動作しますか?現在、すべてのテストはAppTestに添付されています。 'func(t * AppTest)TestMethodName(){}' – Camway

+0

申し訳ありませんが、私はあなたがコマンドラインで 'go test'を実行することを意味していると思っていました(それは' ... 'のものが動作する場所です、' revel'もサポートしていますね)。 revelスタイルのテストだけを使っているのであれば、非標準的な方法で動作させるので、基本的に['revel/testing.TestSuite'](https://godoc.org/github.com/)をインスタンス化する必要がありますrevel/revel/testing#TestSuite)を呼び出し、そのメソッドを呼び出すことができますが、同じロジックが適用されます。テストは単なる関数であり、お互いを再利用できるようにすることができます。 – nothingmuch

+0

修正は、 'AppTest'の中に埋め込まれた' TestSuite'を初期化し、 'AppTest'のメソッドを明示的に呼び出します。 – nothingmuch

関連する問題