ios - OCMArg checkWithBlock 因 EXC_BAD_ACCESS 而崩溃
<p><p>这是我的测试的样子:</p>
<pre><code>// In setUp:
self.APIClientMock = OCMClassMock();
OCMStub().andReturn(self.APIClientMock);
// In test method:
OCMVerify([self.APIClientMock POST:@"invitations" parameters:[OCMArg checkWithBlock:^BOOL(NSDictionary *parameters) {
// Some parameters check is supposed to be here, but even simply returning YES doesn't work...
return YES;
}] success: failure:]);
</code></pre>
<p>APIClient 是 AFHTTPSessionManager 的子类(来自 AFNetworking)。 </p>
<p>每次执行此测试时,都会出现如下 <code>EXC_BAD_ACCESS</code> 错误:</p>
<pre><code>EXC_BAD_ACCESS (code=1, address=0x7a0090020)
</code></pre>
<p>坦率地说,我对调试<code>EXC_BAD_ACCESS</code>错误并不是特别有经验,而且错误信息似乎也不是很有用</p>
<p>另外,奇怪的是,这只发生在我使用 <code>POST:parameters:success:failure:</code> 时,而不是它的 <code>GET</code> 对应项(它完全相同的参数)。</p>
<p>这会是 AFNetworking 内部的问题吗?</p>
<p><strong>编辑:</strong></p>
<p>启用僵尸对象进行测试,结果如下:</p>
<pre><code>*** -: message sent to deallocated instance 0x7fbd8306f280
</code></pre>
<p><strong>编辑 2:</strong></p>
<p>我将我的测试用例简化为以下总是重现崩溃的代码:</p>
<pre><code>#import <AFNetworking.h>
#import <OCMock/OCMock.h>
#import <XCTest/XCTest.h>
@interface ExampleTests : XCTestCase
@end
@implementation ExampleTests
- (void)sendRequesUsingSessionManager:(AFHTTPSessionManager *)sessionManager {
NSDictionary *parameters = @{@"param": @"value"};
;
}
- (void)testExample {
id sessionManagerMock = OCMClassMock();
;
OCMVerify([sessionManagerMock POST:@"test" parameters:[OCMArg checkWithBlock:^BOOL(NSDictionary *parameters) {
return YES;
}] success: failure:]);
}
@end
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>这似乎是一个已知问题:</p>
<p> <a href="https://github.com/erikdoe/ocmock/issues/147" rel="noreferrer noopener nofollow">https://github.com/erikdoe/ocmock/issues/147</a> </p>
<p>我按照问题讨论中的建议做了以下解决方法:</p>
<ol>
<li>将 <code>OCMVerify</code> 更改为 <code>OCMExpect</code></li>
<li>在您的测试调用预期方法之前移动您的 <code>OCMExpect</code> 代码</li>
<li>最后调用<code>OCMVerifyAll</code></li>
</ol></p>
<p style="font-size: 20px;">关于ios - OCMArg checkWithBlock 因 EXC_BAD_ACCESS 而崩溃,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/33773866/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/33773866/
</a>
</p>
页:
[1]