2013-06-16 1 views
3

Я могу использовать следующий код, чтобы проверить, что крейсер был вызван дважды. Но как проверить, что параметр первого вызова равен 7, а параметр второго вызова - 8?Как использовать киви для проверки параметров вызова функции?

id cruiser = [Cruiser cruiser]; 
[[cruiser should] receive:@selector(energyLevelInWrapCore:) withCount:2]; 
[cruiser energyLevelInWarpCore:7]; 
[cruiser energyLevelInWarpCore:8]; 

А можно ли получить параметр после вызова метода? Как и следующий код.

id cruiser = [Cruiser cruiser]; 
[cruiser stub:@selector(energyLevelInWarpCore:)]; 
[cruiser energyLevelInWarpCore:7]; 
[cruiser energyLevelInWarpCore:8]; 
[[[[[cruiser stub] calles][1] arguments][0] should] equal:theValue(8)]; // This doesn't work 
+0

'equal:' или 'equalTo:' или '==' –

ответ

1

У вас есть реальный пример кода? В примере, который вы указали, вы набрали energyLevelInWarpCore: в верхней части теста, поэтому тест никогда не сработает, поскольку вы не звоните в какой-либо другой код. Все, что вы действительно делаете, - это тренировка.

Скажите, что у вас был объект Cruiser, в котором был один экземпляр WarpCore. Отправка Cruiser сообщение engage должен прокачать ядро ​​основы, а затем включите его до полной скорости:

describe(@"Cruiser", ^{ 
    describe(@"-engage", ^{ 
     it(@"primes the warp core then goes to full speed", ^{ 
      id warpCore = [WarpCore mock]; 
      Cruiser *enterprise = [Cruiser cruiserWithWarpCore:warpCore]; 

      [[[warpCore should] receive] setEnergyLevel:7]; 
      [[[warpCore should] receive] setEnergyLevel:8]; 

      [enterprise engage]; 
     }); 
    }); 
}); 

Message patterns являются одним из способов аргументов тестирования (вы также можете использовать receive:withArguments:). Вышеприведенный пример демонстрирует, что установка двух ожиданий для одного и того же селектора, но с разными аргументами, приводит к двум уникальным утверждениям.

Вы можете также использовать Capture Spies для тестирования аргументов в more complex scenarios, such as asynchronous code.

+0

Чтобы прояснить этот бит магии: они называются [Ожидания шаблона сообщений] (https://github.com/allending/Kiwi/wiki/Expectations# сообщение-модель). –

+0

Нет, это не сработает. Я должен запустить ваш код до [cruiser energyLevelInWarpCore: 8], а не после. – zhangchiqing

+0

@zhangchiqing Обновлен вопрос, чтобы решить, что я думаю, проблема с вашим примером. –

 Смежные вопросы

  • Нет связанных вопросов^_^