Запускать тесты несколько раз с разными beforeEach

Есть два способа передать объект, который можно получить при выполнении задания 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");
0
задан paulalexandru 18 March 2019 в 14:23
поделиться

1 ответ

Разница в том, что в случае 1 вы создаете новый объект каждый раз перед вызовом методаEach, а в случае 2 - нет.

В сочетании с этим факт, что ваш первый тест мутирует объект. Если все тесты ссылаются на один и тот же объект (т. Е. Случай 2), то эта мутация повлияет на любой код, который выполняется после первого теста. Если вместо этого объект перезаписывается перед каждым тестом (случай 1), то мутация не повлияет на другие тесты.

Есть несколько вариантов решения этой проблемы. Один состоит в том, чтобы просто сохранить случай 1; Сбрасывая в известное состояние каждый раз, вы можете получить чистое состояние, чтобы все тесты работали. Другой вариант - не изменять объект. Возможно, тесты могли бы скопировать объект, а затем изменить эту копию.

0
ответ дан Nicholas Tower 18 March 2019 в 14:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: