如何验证 kiwi bdd 测试用例中的 didReceiveMemoryWarning 函数?

How to verify didReceiveMemoryWarning function in kiwi bdd test cases?

我在使用 kiwi 测试用例验证是否收到内存警告功能时遇到问题。如何验证功能?

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

有人知道 kiwi 测试用例吗?

直接调用方法即可:

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

使用这种方法,您将需要遍历您希望 nil-ed 出现内存警告的控制器的属性。

或者,您可以查看单元测试应用程序的内存使用情况,看看在模拟内存警告后内存是否减少了。这不如第一种方法准确,但它可以给您一些提示。并且您还需要确保控制器将呈现在屏幕上,或者至少让它认为它已呈现并开始构建视图/table 视图单元等

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.