2015-11-26 4 views
0

Я столкнулся с проблемой, чтобы проверить, действительно ли получена функция предупреждения в память, используя kiwi тестовые примеры. как проверить функцию?Как проверить функцию didReceiveMemoryWarning в тестовых случаях kiwi bdd?

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

Кто-нибудь знает о чехле для киви?

ответ

1

Вы можете просто вызвать метод непосредственно:

it(@"Should cleanup when receiving a memory warning", ^{ 
    [controller didReceiveMemoryWarning]; 
    // assert here that the data that you expected was released 
}); 

При таком подходе вы должны будете пройти через свойство контроллера, который вы ожидаете, чтобы быть в неожиданностях на предупреждении памяти nil-ed.

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

it(@"Should cleanup when receiving a memory warning", ^{ 
    vm_size_t memoryBeforeMemWarning; 
    vm_size_t memoryAfterMemWarning; 
    MyController *controller = nil; 

    @autoreleasepool { 
     controller = ...; 
     // call controller.view, or other methods that create the view 
     // also call any other methods that trigger subview creation 

     memoryBeforeMemWarning = getMemUsage(); 
     //simulate the memory warning 
     [controller didReceiveMemoryWarning]; 
    } 
    memoryAfterMemWarning = getMemUsage(); 

    // reference the variable here to make sure ARC doesn't 
    // release it when it detects its last reference 
    controller = nil; 

    // now assert upon the difference between the two reported memory usages 
}); 

Вы должны использовать autorelease pool иметь контроль над объектами, созданными с помощью autorelease, поскольку эти объекты будут освобождены при завершении области autorelease pool, а не при истощении основного autorelease pool.
Примечание. Я не добавил реализацию getMemUsage(), вы можете узнать, как ее реализовать. here.

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