Есть два способа передать объект, который можно получить при выполнении задания Quartz:
Передайте экземпляр в карте данных. Когда вы установите задание вверх, добавьте свой экземпляр на карту с таким ключом:
// Create job etc...
var MyClass _myInstance;
statusJob.JobDataMap.Put("myKey", _myInstance);
// Schedule job...
Извлеките экземпляр в методе Execute()
задания следующим образом:
public void Execute(IJobExecutionContext context)
{
var dataMap = context.MergedJobDataMap;
var myInstance = (MyClass)dataMap["myKey"];
ИЛИ
Добавьте экземпляр в контекст планировщика, когда вы установите задание вверх, например:
ISchedulerFactory schedFact = new StdSchedulerFactory();
_sched = schedFact.GetScheduler();
_sched.Start();
// Create job etc...
var MyClass _myInstance;
_sched.Context.Put("myKey", myInstance);
// Schedule job...
Извлеките экземпляр в методе Execute()
для задания следующим образом:
public void Execute(IJobExecutionContext context)
{
var schedulerContext = context.Scheduler.Context;
var myInstance = (MyClass)schedulerContext.Get("myKey");
Разница в том, что в случае 1 вы создаете новый объект каждый раз перед вызовом методаEach, а в случае 2 - нет.
В сочетании с этим факт, что ваш первый тест мутирует объект. Если все тесты ссылаются на один и тот же объект (т. Е. Случай 2), то эта мутация повлияет на любой код, который выполняется после первого теста. Если вместо этого объект перезаписывается перед каждым тестом (случай 1), то мутация не повлияет на другие тесты.
Есть несколько вариантов решения этой проблемы. Один состоит в том, чтобы просто сохранить случай 1; Сбрасывая в известное состояние каждый раз, вы можете получить чистое состояние, чтобы все тесты работали. Другой вариант - не изменять объект. Возможно, тесты могли бы скопировать объект, а затем изменить эту копию.