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 に答える