Проблема с OCUnit - создание собственного типа данных - PullRequest
0 голосов
/ 30 июня 2010

Я успешно настроил модульное тестирование для проекта XCode версии 3.2.2 с iPhone SDK версии 3.1.2.

Я создал класс Callout, который я пытаюсь создать в рамкахконтекст юнит-теста.У класса есть метод

-(id) initWithDictionary:(NSDictionary*)calloutDict includesSong:(BOOL)hasSong lastUpdate:(NSDate*)lastUpdate;

, который я вызываю в модульном тесте.При этом я получаю сообщение об ошибке «Неопознанный экземпляр отправлен селектору».Это не имело никакого смысла для меня, поэтому из любопытства я оставил все то же самое и передал 'nil' в качестве параметра словаря, и он собирался и работал (конечно, не пройдя тест, но тем не менее).*

Кто-нибудь знает, что здесь происходит?Я не думаю, что есть что-то не так с использованием пользовательского типа данных в OCUnit, так как я успешно сделал это в других местах модульных тестов.

Кстати, вот код обидчика:

- (void)testCalloutNormal
{ 
 NSDictionary *params = [[NSDictionary alloc] initWithObjects:[NSMutableArray arrayWithObjects:@"sent", 
                  [NSNumber numberWithInt:100], 
                  [NSNumber numberWithInt:50], 
                  @"challengerUsername", 
                  @"challengedUsername", 
                  [NSDate date], 
                  nil] 
               forKeys:[NSMutableArray arrayWithObjects:@"type", 
                  @"challengerScore", 
                  @"challengedScore", 
                  @"challenger", 
                  @"challenged", 
                  @"dateAccepted", 
                  nil]];
 Callout *callout;
 callout = [[Callout alloc] initWithDictionary:params includesSong:NO lastUpdate:[NSDate date]];
 NSInteger ID = 1;
 callout.calloutID = 1;
 [params release];


 STAssertEquals(CalloutOutcomeTypeWon, callout.outcome, @"Failure: challenger's score is higher than the challengee - should return CalloutOutcomeTypeWon");

}

Спасибо!

-Matt

PS - Большинство найденных мной темOCUnit обычно включает в себя предложение некоторой, предположительно, лучшей системы модульного тестирования.Я знаю, что они там есть, но мне не очень интересно, если у вас нет ничего отличного от GHUnit или набора инструментов Google для Mac.

1 Ответ

0 голосов
/ 08 ноября 2010

Не могу с уверенностью сказать, но сомневаюсь, что проблема в OCUnit. Основываясь на том факте, что ошибка исчезает, когда вы передаете nil для параметра словаря, я предполагаю, что оскорбительное сообщение отправляется где-то внутри вашего класса на эту ссылку в словаре. Когда ссылка на словарь равна нулю, она просто поглощает сообщение.

Кстати, если вы ищете среду тестирования, отличную от OCUnit / GHUnit / GTM, я бы порекомендовал вам проверить Cedar ; это среда тестирования в стиле BDD, например, Rspec или Jasmine. Однако, как уже упоминалось, я сомневаюсь, что рамки тестирования - ваша проблема.

...