Как проверить функцию 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()Вы можете узнать, как реализовать это здесь.

Другие вопросы по тегам