persimmon-projects / Persimmon

A unit test framework for F# using computation expressions.

Home Page:http://persimmon-projects.github.io/Persimmon/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

モデルの再設計

bleis-tift opened this issue · comments

モデルの再設計時に考慮すべき事

  • アサーション結果のメモ化(副作用をどう扱うかという方針)
  • 正しい実行時間の計測(テストの並列実行を考えると、部分の総合計が全体の実行時間と等しくならない点にも注意が必要) (see #94)
  • AppDomainを越えるためにモデル側で工夫できる部分があれば取り入れる (see #103)
    • TestAdapter/RunnerはFSharp.Coreを参照しなくて済むようにする(配列等を使う)
  • バージョンアップ時の影響(バージョン不一致の問題)
  • どこで失敗したかの情報をどう持たせるか (see #93)
  • setup/teardownをどうするか (see #14)
  • テストのカテゴリ化 (see #26)
  • 別スレッドで発生した例外の扱い(see #66)
  • F#フレンドリーなメタデータ(ビューでも化)

過去に書いたモデルについてのドキュメントも参考にする。

  • アサーション結果のメモ化 -> Lazyで解決
  • 正しい実行時間の計測 -> 直接実行された実行時間と、最初に実行された実行時間の2つを持てばよい
  • AppDomainを越えるための工夫 -> Interfaceモジュールを用意する
  • バージョンアップ時の影響 -> 後で別ドキュメントにまとめる
  • どこで失敗したかの情報をどう持たせるのか -> コンピュテーションごとにbindで連番を持たせ、bind内に失敗が来た場合はネストさせて伝搬する(NotPassCauseを再帰構造にする)
  • setup/teardown -> try-finallyを用意
  • テストのカテゴリ化 -> メタデータに持たせるだけは持たせておく
  • 別スレッドで発生した例外の扱い -> AggregateException

モデルに追加する情報

  • 直接実行された実行時間
  • 最初に実行された実行時間
  • コンピュテーション式中の位置情報(連番)
  • カテゴリ

メモ: バックグラウンド把握してないんですが、別スレッドで発生する例外はExceptionDispatcherInfoで投げなおすと良いかも #NET45以降限定 http://www.kekyo.net/2015/06/22/5119

スタックトレースの問題ではなく、単に現状では別スレッドで投げられた例外によってPersimmon.Consoleが終了してしまう、という問題ですね。