Quartz Jobs 不像服务在测试环境下那样自动连接。Quartz 作业的文档还明确指出,默认情况下它不会在测试环境下按计划执行(如果您愿意,您可以更改它,但我不会)。我会myJob = new MyJob()
在你的实例中实例化setUp
并调用该execute()
方法来测试它。如果您正在尝试测试触发器,您可能想找到一种方法来查看triggers {}
可能检查元类的内部内容?
编辑回应评论:
我从来没有从应用程序上下文中得到服务,所以这可能会起作用。我可能会测试它的方式如下:
假设您的班级看起来像这样:
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
}
然后对您通过工作的所有路线重复此过程。这样,您可以将测试隔离到尽可能小的部分,并测试您正在调用的对象的逻辑,而不是它正在使用的服务。我假设您正在使用服务,因为系统的另一部分正在使用其中的逻辑。如果您正在通过该作业测试服务并且由于某种原因该作业消失了,那么您必须重新编写测试以直接调用该服务。我建议您使用测试直接测试服务并模拟这些服务调用的测试的方式。如果工作消失,您只需删除与之关联的测试,您就不会失去任何测试覆盖率。有点啰嗦,但这就是我测试它的方式。