サービスがテスト環境下にあるように、Quartz ジョブは自動配線されません。Quartz ジョブのドキュメントには、デフォルトではテスト環境でスケジュールどおりに実行されないことも明示されています (必要に応じて変更できますが、私は変更しません)。myJob = new MyJob()
あなたの中でインスタンス化しsetUp
、メソッドを呼び出しexecute()
てテストします。triggers {}
トリガーをテストしようとしている場合は、metaClassを調べて内部にあるものを調べる方法を見つけたいと思うかもしれません。
コメントに応じて編集:
アプリケーションコンテキストからサービスを取得したことがないので、うまくいくかもしれません。私がおそらくそれをテストする方法は次のとおりです。
クラスが次のようになっていると仮定します。
class MyJob {
def myServiceA
def myServiceB
def execute() {
if(myJobLogicToDetermineWhatToDo) {
myServiceA.doStuff(parameter)
} else {
myServiceB.doStuff(parameter)
}
}
}
ここで本当にテストしたいのは、myJobLogicToDetermineWhatToDo
. サービス myServiceA および myServiceB に対して、それらが正しく機能していることを確認するための統合および/または単体テストがある (または簡単に記述できる) と仮定します。次に、単体テストを作成して、ジョブのロジック/配線を適切なサービスにテストします。
@Test
void routeOne() {
def job = new MyJob()
def myServiceA = new Object()
def expectedParameter = "Name"
def wasCalled = false
myServiceA.metaClass.doStuff = {someParameter ->
assert expectedParameter == someParameter
wasCalled = true
}
job.myServiceA = myServiceA
//Setup data to cause myServiceA to be invoked
job.execute()
assert wasCalled
}
次に、ジョブを通過するすべてのルートに対してこのプロセスを繰り返します。このようにして、テストを可能な限り最小の部分に分離し、使用しているサービスではなく、呼び出しているオブジェクトのロジックをテストできます。そこのロジックがシステムの別の部分で使用されているため、サービスを使用していると思います。このジョブでサービスをテストしていて、何らかの理由でジョブがなくなった場合は、テストを書き直してサービスを直接呼び出す必要があります。私が提案した方法では、サービスを直接テストするテストと、それらのサービス呼び出しをモックするテストがあります。ジョブがなくなった場合は、それに関連付けられているテストを削除するだけで、テスト カバレッジが失われることはありません。ちょっと長くなりましたが、それが私がそれをテストする方法です。