【发布时间】:2015-09-08 03:31:59
【问题描述】:
我正在使用 XCTest 在我的项目中编写单元测试,当使用 XCAssertNil() 或 XCAssertNotNil() 方法时,XCTest 框架崩溃。
这是我的测试:
XCTAssertNotNil(messageCollection.fieldName, "field_name must be not-nil")
这是堆栈跟踪:
2015-06-22 17:05:17.629 xctest[745:8747] *** Assertion failure in void _XCTFailureHandler(XCTestCase *, BOOL, const char *, NSUInteger, NSString *, NSString *, ...)(), /SourceCache/XCTest_Sim/XCTest-7701/XCTestFramework/OtherSources/XCTestAssertionsImpl.m:41
Test Case '-[Wakanda_iOS_Framework_Tests.WAKAdapterTest testEntityCollectionParsing]' started.
2015-06-22 17:05:17.631 xctest[745:8747] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Parameter "test" must not be nil.'
似乎 XCTest 有一个名为 test 的参数,它不能为 nil,这对于预期检查 nil(或非 nil)值的方法来说很奇怪......有其他人遇到这个问题并解决了吗?
【问题讨论】:
-
我遇到了同样的错误,但情况不同。我认为问题在于我巧妙地滥用了测试 API —— 进行异步测试,并尝试在调用
expectation.fulfill()之后使用XCTAssertEqual。我的猜测是测试框架没有注意到真正的问题,然后由于看似无关的原因而崩溃。 -
是的 - 当您调用
expectation.fulfill()然后订购一些异步代码时,XCTestCase可能会被卸载。在@MattFenwick 下方查看我的答案 -
昨天,我在使用 XCAssertNotNil() 和 XCAssertTrue() 函数时遇到了相同的“异常 'NSInternalInconsistencyException',原因:'参数“test”不能为 nil。'”错误。奇怪的是,这些测试已经使用了几个星期,但是当我更改了我一直在测试的函数中的一个参数时,它就开始了。而且这也是一个亮点:异常之后的任何测试都不会运行。我终于解决了这个问题,对项目进行了清理,丢弃了 DerivedData 中的文件夹并重新启动计算机。 Xcode 9.2,顺便说一句。