テストのカテゴリ化
Closed this issue · 3 comments
bleis-tift commented
テストのカテゴリ化
bleis-tift commented
テストエクスプローラの「特徴」によるフィルタリングで使える気がする。モデルには何らかの情報として持たせておきたいが、今すぐ活用するかと言うと疑問。
hafuu commented
テストのカテゴリ化について考えてみました。
型
TestMetadata
型に val Categories : string[]
プロパティを追加する。
TestMetadata
を継承している型は TestCase
と Context
がある。
type TestMetadata =
val Name : string
val Categories : string[]
...
カテゴリの設定方法
1. テストケースに設定する
下記シグネチャの関数で、テストケースにカテゴリを設定する
val category : name:string -> test:TestCase<'T> -> TestCase<'T>
例
// テストにカテゴリを設定する
let test1 = test { do! pass() } |> category "CategoryA"
// パラメタライズテスト
let test2 = parameterize {
source [ 1 ]
run (fun _ -> test { do! pass() } |> category "CategoryB")
}
2. モジュール配下の全テストに設定する
下記属性をモジュールに付けると、モジュール配下の全テストにカテゴリが設定される
type CategoryAttribute = class end
例
[<Category("CategoryC")>]
module SomeTest =
// "CategoryC" というカテゴリが設定される
let test3 = test { do! pass() }
// "CategoryC" と "CastegoryD" が設定される
let test4 = test { do! pass() } |> category "CategoryD"
[<Category("CategoryE")>]
module NestedModule =
// "CategoryC" と "CategoryE" が設定される
let test5 = test { do! pass() }
カテゴリの実行方法
指定したカテゴリを実行する
Persimmon.Console.exe tests.dll --category:CategoryA,CategoryB
指定したカテゴリ以外を実行する
Persimmon.Console.exe tests.dll --exclude-category:CategoryD,CategoryE
その他
1. テストを合成した場合はカテゴリについて
次のような場合に、 test1
のCategoryA
は引き継がず、test2
のカテゴリは無しとする。
let test1 = test { return 1 } |> category "CategoryA"
let test2 = test {
let! x = test1
do! x |> assertEquals 1
}
pocketberserker commented
implemented #126