如何测试一个对象将在拆卸后被释放

Posted

技术标签:

【中文标题】如何测试一个对象将在拆卸后被释放【英文标题】:How to test that an object will be deallocated after teardown 【发布时间】:2014-12-23 03:04:19 【问题描述】:

有没有办法测试我的对象在 XCTest.我正在考虑做这样的事情:

[self.client teardown];
__weak typeof(self.client) weakClient = self.client;
XCTestExpectation *teardownExpectation = ...;
dipatch_time_t delay = ...
dispatch_after(delay, dispatch_get_main_queue(), ^
    XCTAssertNil(weakClient);
    [teardownExpectation fulfill];

self.client = nil;
[self waitForExpectationsWithTimeout:5.0 ...];

但是这样做的问题是自动释放池不会耗尽,所以我的对象实际上永远不会被释放。

还有其他方法可以测试吗?

【问题讨论】:

【参考方案1】:

您可以将其放入您自己的自动释放池中,然后将其排空,以模拟运行循环结束时会发生的情况。显然,在这里您通过等待测试的期望来保持运行循环。但测试分配的更好方法是使用 Instruments 和泄漏/分配工具。

【讨论】:

是的,但是该对象是在测试设置中创建的,我真的不想从那里删除它。我想这可能无法在测试中自动化。

以上是关于如何测试一个对象将在拆卸后被释放的主要内容,如果未能解决你的问题,请参考以下文章

如何允许在回调时释放对象?

使用 Robot Framework 的执行级别设置和拆卸

如何获取在 testng 拆卸方法中运行的测试方法的名称?

如何在每个场景之后执行拆除以释放资源在使用黄瓜的宁静BDD中

如何通过测试正确设置和拆卸我的 pytest 类?

如何在 RobotFramework 中进行多行测试设置或拆卸而不创建新关键字?