单元测试核心数据 - 用代码134异常退出 [英] Unit Testing Core Data - exited abnormally with code 134
问题描述
我正在为核心数据应用设置单元测试。我在一个很简单的测试遇到一个奇怪的问题。我得到的错误是:
/Developer/Tools/RunPlatformUnitTests.include:451:0测试台/平台/ iPhoneSimulator.platform / Developer / SDKs / iPhoneSimulator4.0.sdk / Developer / usr / bin / otest'退出异常与代码134(它可能已崩溃)。
我的单元测试的标题是:
#import< SenTestingKit / SenTestingKit.h>
#import< UIKit / UIKit.h>
#import< CoreData / CoreData.h>
#importUnit.h
@interface UnitLogicTests:SenTestCase {
NSManagedObjectContext * managedObjectContext;
NSPersistentStoreCoordinator * persistentStoreCoordinator;
NSManagedObjectModel * managedObjectModel;
NSPersistentStore * persistentStore;
}
@end
实现是:
#importUnitLogicTests.h
@implementation UnitLogicTests
#pragma mark安装和拆卸
- (void)setUp {
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
NSLog(@model:%@,managedObjectModel);
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
persistentStore = [persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType
configuration:nil
URL:nil
options:nil
error:NULL];
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];
}
- (void)tearDown
{
[managedObjectContext release];
managedObjectContext = nil;
NSError * error = nil;
STAssertTrue([persistentStoreCoordinator removePersistentStore:persistentStore error:& error],
@无法删除持久存储:%@,错误);
persistentStore = nil;
[persistentStoreCoordinator release];
persistentStoreCoordinator = nil;
[managedObjectModel release];
managedObjectModel = nil;
}
#pragma mark -
#pragma mark测试用例
- (void)testThatEnvironmentWorks
{
STAssertNotNil(persistentStore,@无持久存储);
}
- (void)testNewUnitDefaults {
Unit * newUnit = [NSEntityDescription insertNewObjectForEntityForName:@Unit
inManagedObjectContext:managedObjectContext];
STAssertEquals(newUnit.floorNumber,1,@新单位楼层号的默认值应为1);
}
@end
省略 - (void)testNewUnitDefaults
测试,然后构建完成没有错误,所以在最后一个测试中的东西被抛出一个循环。
/ div>
在您的测试用例附近放置一个@try .... catch块。
我想加载模型
[NSManagedObjectModel mergedModelFromBundles:nil]
没有按预期工作
使用您的代码初始化核心数据堆栈我有一个异常
+ entityForName:在此模型中找不到名为Unit的实体。
将模型初始化更改为以下代码:
//根据你的modeltest中的标识符设置Info.plist
NSString * path = [[NSBundle bundleWithIdentifier:@com.yourcompany。 ModelTest]
pathForResource:@CoreDataUnitTest_DataModel
ofType:@mom];
NSURL * modelURL = [NSURL URLWithString:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
单元测试OCUnit有时是有点棘手,因为只有很少的错误信息被暴露。
I am setting up unit testing for my core data app. I'm running into a strange problem in a pretty simple test. The error I'm getting is:
/Developer/Tools/RunPlatformUnitTests.include:451:0 Test rig '/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/Developer/usr/bin/otest' exited abnormally with code 134 (it may have crashed).
The header for my unit tests is:
#import <SenTestingKit/SenTestingKit.h>
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "Unit.h"
@interface UnitLogicTests : SenTestCase {
NSManagedObjectContext *managedObjectContext;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
NSManagedObjectModel *managedObjectModel;
NSPersistentStore *persistentStore;
}
@end
The implementation is:
#import "UnitLogicTests.h"
@implementation UnitLogicTests
#pragma mark Setup and Teardown
- (void)setUp {
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles: nil] retain];
NSLog(@"model: %@", managedObjectModel);
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
persistentStore = [persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType
configuration:nil
URL:nil
options:nil
error:NULL];
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];
}
- (void)tearDown
{
[managedObjectContext release];
managedObjectContext = nil;
NSError *error = nil;
STAssertTrue([persistentStoreCoordinator removePersistentStore:persistentStore error:&error],
@"couldn't remove persistent store: %@", error);
persistentStore = nil;
[persistentStoreCoordinator release];
persistentStoreCoordinator = nil;
[managedObjectModel release];
managedObjectModel = nil;
}
#pragma mark -
#pragma mark Test Cases
- (void)testThatEnvironmentWorks
{
STAssertNotNil(persistentStore, @"no persistent store");
}
- (void)testNewUnitDefaults {
Unit *newUnit = [NSEntityDescription insertNewObjectForEntityForName:@"Unit"
inManagedObjectContext:managedObjectContext];
STAssertEquals(newUnit.floorNumber, 1, @"Default value for new Unit's floor number should be 1");
}
@end
If I omit the - (void)testNewUnitDefaults
test, then the build completes without errors, so something in that last test is throwing it for a loop. I am new to this, so any assistance would be greatly appreciated!
Thanks.
put a @try .... catch block around your testcase.
I think loading the model with
[NSManagedObjectModel mergedModelFromBundles: nil]
did not work as expected
Using your code for initialization of the core data stack I got an exception
+entityForName: could not locate an entity named 'Unit' in this model.
Changing the model initialization to the following code works fine:
// set according to the identifier in your modeltest Info.plist
NSString* path = [[NSBundle bundleWithIdentifier:@"com.yourcompany.ModelTest"]
pathForResource:@"CoreDataUnitTest_DataModel"
ofType:@"mom"];
NSURL* modelURL = [NSURL URLWithString:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
Unit Tests with OCUnit sometimes are a bit tricky as only little information on errors is exposed.
这篇关于单元测试核心数据 - 用代码134异常退出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!