2013-11-20 2 views
0

Im новое для модульного тестирования и OCMock, поэтому это может быть очевидный ответ, просто не нашел ответа на google. Я пытаюсь проверить метод объекта модели. метод имеет следующий код:mocking a class - iOS

//takes a filepath and a pk, sets the filepath to the 
BoxAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
NSNumber *ifExistIndexInJson = [BoxJsonDataHelper pkExistInCurrentJson:[[[self.downloadQueue objectAtIndex:0] objectForKey:@"pk"] integerValue]]; 
if (ifExistIndexInJson) 
{ 
    [[[self.downloadQueue objectAtIndex:0] objectForKey:@"fields"] setObject:path forKey:@"content"]; 
    NSError *error = nil; 
    [[NSFileManager defaultManager] removeItemAtPath:[[[delegate.currentJsonData objectAtIndex:[ifExistIndexInJson integerValue]] objectForKey:@"fields"] objectForKey:@"content"] error:&error]; 
    [delegate.currentJsonData removeObjectAtIndex:[ifExistIndexInJson integerValue]]; 
    [delegate.currentJsonData addObject:[self.downloadQueue objectAtIndex:0]]; 
    [self.downloadQueue removeObjectAtIndex:0]; 
    if ([self.downloadQueue count] > 0) 
    { 
    [BoxServerRequestsObject downloadFileForPK:[[[self.downloadQueue objectAtIndex:0] objectForKey:@"pk"] integerValue]sender:self]; 
    } 
    else 
    { 
     //end the progress or whatever 
    } 
} 
else 
{ 
    [[[self.downloadQueue objectAtIndex:0] objectForKey:@"fields"] setObject:path forKey:@"content"]; 
    [delegate.currentJsonData addObject:[self.downloadQueue objectAtIndex:0]]; 
    [self.downloadQueue removeObjectAtIndex:0]; 
    if ([self.downloadQueue count] > 0) 
    { 
    [BoxServerRequestsObject downloadFileForPK:[[[self.downloadQueue objectAtIndex:0] objectForKey:@"pk"] integerValue]sender:self]; 
    } 
    else 
    { 
     //end the progress or whatever 
    } 

} 

мне нужна помощь с парой вещей:

  1. , когда я звоню [BoxJsonDataHelper pkExistInCurrentJson: ...]. BoxJsonDataHelper на самом деле сам, только это метод класса, а не экземпляр, поэтому я называю его по имени. Как я могу подделать результаты возвращаемого значения, чтобы не было никакой зависимости?

  2. Как подделать файл по пути для удаления программы? чем я могу проверить, что он был удален?

  3. Как мне высмеять BoxServerRequestObject, чтобы заставить метод вызывать макетный объект вместо реального? и чем, как я могу проверить, если она была вызвана (также метод класса)

Мои знания в модульном тестировании ограничено, и я только начал с OCMock и прочитать некоторые примеры, так что я был бы признателен за исчерпывающие ответы:)

ответ

0
  1. Вы можете высмеять методы класса так же, как методы экземпляра. Они продолжают насмехаться, пока макет не будет отменен.

    id boxJsonDataHelperMock = [OCMockObject mockForClass: BoxJsonDataHelper.class]; [[[boxJsonDataHelperMock заглушкой] andReturn: @ (1)] pkExistInCurrentJson: OCMOCK_ANY]

  2. Вы просто проверки наличия NSFileManager работы в этой точке? С объектами данных я предпочитаю делать собственно запись. Почему бы просто не утверждать, что файл не существует после его удаления? Если вы хотите, чтобы дразнить, вы должны издеваться «defaultManager» на NSFileManager и вернуть фиктивный объект, который ожидает removeItemAtPath:error:

  3. Поместите макет объекта в очереди загрузки с индексом 0.

+0

Я nit- но они продолжают насмехаться, пока не назовете -stopMocking или макет dealloc'd. Очень важно, чтобы вы вызывали stopMocking, как только закончите тест, если вы издеваетесь над методами классов инфраструктуры, например NSURLConnection. – ImHuntingWabbits