【问题标题】:How to unit test NSArrayController (subclass)?如何对 NSArrayController(子类)进行单元测试?
【发布时间】:2014-10-08 08:56:21
【问题描述】:

我想为我的 NSArrayController 子类编写一些单元测试。
我首先设置了一个核心数据托管对象上下文,然后将实体“资产”的一些对象添加到核心数据,然后设置我的数组控制器:

@interface MYAssetArrayControllerTest : XCTestCase
...

- (void)setUp
{
    [super setUp];
    [self setUpManagedObjectContext];
    [self setUpAssets];
    [self setUpMYAssetArrayController];
}

- (void)setUpMYAssetArrayController
{
    _arrayController = [[MYAssetArrayController alloc] init];
    [_arrayController setManagedObjectContext:_moc];
    [_arrayController setEntityName:@"Asset"];
    [_arrayController setSelectsInsertedObjects:YES];
    [_arrayController setAutomaticallyPreparesContent:YES];
    [_arrayController fetch: self];
}

当我尝试查看排列的对象时,没有:

- (void)testGetArrangedObjects
{
    id myArrangedObjects;
    myArrangedObjects = [_arrayController arrangedObjects];
    ...
}

myArrangedObjects 始终为空...
我必须如何设置我的 NSArrayController 才能从中检索对象?

【问题讨论】:

    标签: objective-c cocoa core-data nsarraycontroller xctest


    【解决方案1】:

    当我不发送 fetch: 而是 fetchWithRequest:merge:error: 到我的阵列控制器时,我发现它有效。我的原始代码:

    - (void)setUpMYAssetArrayController
    {
        _arrayController = [[MYAssetArrayController alloc] init];
        [_arrayController setManagedObjectContext:_moc];
        [_arrayController setEntityName:@"Asset"];
        [_arrayController setSelectsInsertedObjects:YES];
        [_arrayController setAutomaticallyPreparesContent:YES];
        [_arrayController fetch: self];
    }
    

    变成:

    - (void)setUpMYAssetArrayController
    {
        _arrayController = [[MYAssetArrayController alloc] init];
        [_arrayController setManagedObjectContext:_moc];
        [_arrayController setEntityName:@"Asset"];
        [_arrayController setSelectsInsertedObjects:YES];
        [_arrayController setAutomaticallyPreparesContent:YES];
        NSError *error = nil;
        BOOL ok = [_arrayController fetchWithRequest:nil merge:NO error:&error];
    }
    

    也许-fetch 的以下评论可能是一种解释?

    从 OS X v10.4 开始,此方法的结果将延迟到 runloop 的下一次迭代,以便错误呈现 机制可以以表格形式提供反馈。

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      相关资源
      最近更新 更多