Skip to content

Instantly share code, notes, and snippets.

@mike-neck
Last active March 16, 2020 11:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mike-neck/73e9d7d21504ce222aa0bc581285c260 to your computer and use it in GitHub Desktop.
Save mike-neck/73e9d7d21504ce222aa0bc581285c260 to your computer and use it in GitHub Desktop.
JUnit Platform Engine を実際に書いて動かしてみた

実装する必要があるのは以下の 2 つのクラスくらい

  • TestEngine
  • TestDescriptor

TestEngine

エンジンのエントリーポイント。 JUnit Launcher は ServiceLoader の仕組みを使って、エンジンのインスタンスを取得して起動する

  • discover - これによりテストを表すクラス・メソッドなどをスキャンする。スキャンした内容を TestDescriptor に入れて返す
  • getId - エンジンを表す ID。エンジンの ID として UniqueId がここから作られる
  • execute - テストを実行する。パラメーターの ExecutionRequest から discover でスキャンしたテストの集合が得られるので、それを一つずつ実行する。 実行の開始、終了は ExecutionRequest から取得できる EngineExecutionListener に都度報告する

TestDescriptor

テスト、あるいはテストを内包するコンテナクラス、あるいはエンジンのメタ情報をもつオブジェクト。以下のヒエラルキーを持つ。

  1. エンジンディスクリプター - テストエンジンを表す。 children に 2. を持つ/ getSource は必ず Optional を返す
  2. コンテナディスクリプター - テストケースクラスを表す。 children に 3. を持つ/ getSourceClassSource を返す
  3. メソッドディスクリプター - テストメソッド、つまり個々のテストを表す/ getSourceMethodSource を返す
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment