6

我编写了一个自定义冲突处理例程,它会自动启动以解决 NSFileVersion 的冲突版本。现在我想编写单元测试以确保它有效。这是问题:

如何在单元测试中导致/创建冲突版本?

这本质上归结为:如何在不通过 iCloud 手动执行的情况下引发冲突?由于这仅用于测试目的,我不在乎使用私有 API 或直接侵入系统——只要结果是从NSFileVersion's +unresolvedConflictVersionsOfItemAtURL. 任何建议将不胜感激!

最大限度

4

1 回答 1

3

您可以+unresolvedConflictVersionsOfItemAtURL使用自己的版本进行修补,该版本返回一系列冲突的版本:

#import <objc/runtime.h>

static IMP __originalUnresolvedConflictVersionIMP = NULL ;
static NSArray * MyNSFileVersionUnresolvedConflictVersions( id self, SEL _cmd, NSURL * url )
{
    // this code just calls the original implementation... 
    // You can return an array of conflicting NSFileVersion objects instead...

    NSLog(@"%s called\n", __PRETTY_FUNCTION__ ) ;
    return (*__originalUnresolvedConflictVersionIMP)( self, _cmd, url ) ;
}


@implementation NSFileVersion (Test)

+(void)load
{
    __originalUnresolvedConflictVersionIMP = class_replaceMethod( objc_getMetaClass( "NSFileVersion") , @selector( unresolvedConflictVersionsOfItemAtURL: ), (IMP)MyNSFileVersionUnresolvedConflictVersions, "@@:@" ) ;
}

@end

这足以继续吗?我可能会先在我的替代“方法”中尝试这个:

return [ [ self otherVersionsOfItemAtURL:url ] lastObject ] ;
于 2012-09-03T21:46:14.820 回答