Xcode 7 个 Magical Record 单元测试失败
Xcode 7 Magical Record Unit Tests Fail
从 Xcode 6.4 升级到 Xcode 7(现在是 7.0.1)后,我的项目在开始单元测试时崩溃了。我的 iOS 项目正在使用 Magical Record 并且应用程序在此断言时崩溃:
+ (NSManagedObjectContext *) MR_defaultContext
{
@synchronized(self) {
NSAssert(MagicalRecordDefaultContext != nil, @"Default context is nil! Did you forget to initialize the Core Data Stack?");
return MagicalRecordDefaultContext;
}
}
我已经注释掉了我以前的所有测试,这两个测试都显示了相同的行为:
#import <XCTest/XCTest.h>
@interface BadTests : XCTestCase
@end
@implementation BadTests
- (void)setUp {
[super setUp];
}
- (void)tearDown {
[super tearDown];
}
- (void)testSanity {
XCTAssert(1 == 1);
}
@end
和
#import <XCTest/XCTest.h>
#import <MagicalRecord/MagicalRecord.h>
@interface BadTests : XCTestCase
@end
@implementation BadTests
- (void)setUp {
[super setUp];
NSLog(@"*** USING IN MEMORY STORE ***");
[MagicalRecord setLoggingLevel:MagicalRecordLoggingLevelDebug];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
}
- (void)tearDown {
[MagicalRecord cleanUp];
[super tearDown];
}
- (void)testSanity {
XCTAssert(1 == 1);
}
@end
使用相同的测试恢复到 Xcode6 可以解决问题。
这种情况可能源于发行说明中提到的旧运行时环境的存在:
Xcode processes may quit unexpectedly if older iOS Simulator runtimes
(Xcode 6.x) are present on disk
要检查是否是这个原因,您可以从 /Library/Developer/CoreSimulator/Profiles/Runtimes
中删除所有旧的运行时库
最终通过调整我的 Podfile 解决了问题:
link_with 'TestApp', 'TestAppTests', 'TestAppUITests'
platform :iOS, '8.1'
target 'TestApp' do
pod 'MagicalRecord'
end
target 'TestApp' do
pod 'OHHTTPStubs'
end
之前我的 pod 文件是这样的:
platform :iOS, '8.1'
pod 'MagicalRecord'
pod 'OHHTTPStubs'
从 Xcode 6.4 升级到 Xcode 7(现在是 7.0.1)后,我的项目在开始单元测试时崩溃了。我的 iOS 项目正在使用 Magical Record 并且应用程序在此断言时崩溃:
+ (NSManagedObjectContext *) MR_defaultContext
{
@synchronized(self) {
NSAssert(MagicalRecordDefaultContext != nil, @"Default context is nil! Did you forget to initialize the Core Data Stack?");
return MagicalRecordDefaultContext;
}
}
我已经注释掉了我以前的所有测试,这两个测试都显示了相同的行为:
#import <XCTest/XCTest.h>
@interface BadTests : XCTestCase
@end
@implementation BadTests
- (void)setUp {
[super setUp];
}
- (void)tearDown {
[super tearDown];
}
- (void)testSanity {
XCTAssert(1 == 1);
}
@end
和
#import <XCTest/XCTest.h>
#import <MagicalRecord/MagicalRecord.h>
@interface BadTests : XCTestCase
@end
@implementation BadTests
- (void)setUp {
[super setUp];
NSLog(@"*** USING IN MEMORY STORE ***");
[MagicalRecord setLoggingLevel:MagicalRecordLoggingLevelDebug];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
}
- (void)tearDown {
[MagicalRecord cleanUp];
[super tearDown];
}
- (void)testSanity {
XCTAssert(1 == 1);
}
@end
使用相同的测试恢复到 Xcode6 可以解决问题。
这种情况可能源于发行说明中提到的旧运行时环境的存在:
Xcode processes may quit unexpectedly if older iOS Simulator runtimes (Xcode 6.x) are present on disk
要检查是否是这个原因,您可以从 /Library/Developer/CoreSimulator/Profiles/Runtimes
中删除所有旧的运行时库最终通过调整我的 Podfile 解决了问题:
link_with 'TestApp', 'TestAppTests', 'TestAppUITests'
platform :iOS, '8.1'
target 'TestApp' do
pod 'MagicalRecord'
end
target 'TestApp' do
pod 'OHHTTPStubs'
end
之前我的 pod 文件是这样的:
platform :iOS, '8.1'
pod 'MagicalRecord'
pod 'OHHTTPStubs'