如何验证 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.
我在使用 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.