Использование структуры с OCMock или Hamcrest - PullRequest
9 голосов
/ 05 февраля 2009

Я вхожу в блокпост и мне интересно, могут ли блестящие коллективные умы здесь помочь. В ObjC CocoaTouch я пытаюсь смоделировать объект, который принимает параметры структуры и возвращает структуру. OCMock кашляет волосяным шариком, поэтому я попытался обернуть его средством для подбора Hamcrest Нет, умри. Тестируемая функция / метод выглядит примерно так:

- (CLLocationCoordinate2D)pixelToLatLong:(CGPoint)aPoint;

Я использую такой код:

#define OCMOCK_STRUCT(atype, variable) [NSValue value:&variable withObjCType:@encode(atype)]
-(void) testMyWidget
{
    CLLocationCoordinate2D ulLL = (CLLocationCoordinate2D){123,456};
    CLLocationCoordinate2D lrLL = (CLLocationCoordinate2D){654,321};
    [[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, ulLL)] pixelToLatLong:(CGPoint){0,0}];
    [[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, lrLL)] pixelToLatLong:(CGPoint){320,460}];//lower right point
}

Это вроде работает. Таким образом, в моем объекте, который я тестирую, я делаю необходимые необходимые изменения, чтобы получить зеленую полосу ... ошибаться ... зеленую кнопку в окне информации о сборке. Когда я уверен, что мой тест должен пройти, я получаю ошибочные утверждения. Ошибки сообщают мне, что метод был вызван неожиданно, и перечисляют значения для этих структур в виде вопросительных знаков. Я пытался обернуть структуры с помощью совпадений Hamcrest, но ничего не получилось. Я собираюсь отключить мой отладчик, который, без сомнения, покажет мне, что не так. У кого-нибудь здесь были подобные проблемы с OCMock / Hamcrest и структурами? Если да, то как лучше всего справиться с этими типами?

Ответы [ 4 ]

3 голосов
/ 21 февраля 2011

На самом деле лучший ответ - это сам Клифф: http://codeforfun.wordpress.com/2009/02/07/ocmock-return-a-struct/

Он просто не обновил этот вопрос, позор стыдно:)

3 голосов
/ 07 июня 2010

Ты очень близко. Ваш #define должен быть:

#define OCMOCK_STRUCT(atype, variable) [NSValue valueWithBytes:&variable withObjCType:@encode(atype)]
2 голосов
/ 30 сентября 2010

У меня были проблемы с ответом макроса; написать вспомогательную функцию, которая возвращает структуру в классе тестирования, и использовать:

[[[mockObject stub] andCall:@selector(selectorName) onObject:self] someMethod];

работал очень хорошо.

0 голосов
/ 09 января 2010

Иногда макет с ручным кодированием легче, чем пытаться заставить структуру фиктивного объекта выйти за пределы его нормальных шаблонов использования.

...