Как очистить предыдущие ожидания по объекту?

Есть еще пара статей по этому вопросу, и я думал, что моя проблема в другом, однако я сделал следующее и исправил это с помощью общего решения, которое нашел в других постах:

  1. [116 ] Проверено, что мета-значение на самом деле сохраняется в базе данных для мета-ключа .

  2. Проверенные параметры метода get_post_meta доступны для чтения методу (в моем случае $ item_id был недопустимым, метод требует фактический идентификатор сообщения продукта)

  3. Проверьте условие фактически использовал правильные значения: if ($ custom_field == "yes")

Окончательный код для функции foreach:

foreach ( $order->get_items() as $item_id => $item ) {
                $product_id = $item->get_product_id();
                $custom_field = get_post_meta( $product_id, '_custom_field', true );
                $line_total = $item->get_total();

                if( $custom_field == "yes" ) {
                    $amount += $line_total;
                }
            }
62
задан BartoszKP 7 March 2017 в 10:08
поделиться

1 ответ

Есть три способа:

Вы можете сбросить ожидания с помощью BackToRecord

Я должен признать, что Я никогда не использовал его, потому что это неловко.

// clear expectations, an enum defines which
_stubRepository.BackToRecord(BackToRecordOptions.All);
// go to replay again.
_stubRepository.Replay();

Редактировать: Теперь я использую его иногда, это на самом деле самый чистый способ. Должен быть метод расширения (например, Stub), который делает это - я думаю, что он просто забыт. Я бы предложил написать свой.

Вы можете использовать Repeat.Any ()

. Он «нарушает» порядок определения с заглушкой и «переопределяет» предыдущие определения. Но это как-то неявно. Я использую его иногда, потому что это легко написать.

_stubRepository.Stub(x => x.Contains(null))
  .IgnoreArguments()
  .Return(false)
  .Repeat.Any();

Вы можете создать новый макет

Тривиально, но явно и легко понять. Это проблема, только если вы хотите сохранить множество определений и изменить только один вызов.

_stubRepository = MockRepository.GenerateMock<IRepository>();
_stubRepository.Stub(x => x.Contains(null))
  .IgnoreArguments()
  .Return(false);
78
ответ дан 24 November 2019 в 16:48
поделиться
Другие вопросы по тегам:

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