2012-08-26 12 views
6

बनाते हुए मैंने एक कस्टम टकराव हैंडलिंग दिनचर्या लिखा है जो स्वचालित रूप से NSFileVersion के विरोधाभासी संस्करणों को हल करने के लिए किक करता है। अब यह सुनिश्चित करने के लिए कि यह काम करता है, मैं यूनिट परीक्षण लिखना चाहता हूं। यहां प्रश्न है:स्वचालित रूप से विरोधाभासी NSFileVersions

मैं इकाई परीक्षण के भीतर विरोधाभासी संस्करणों का कारण/निर्माण कैसे करूं?

यह सार तत्व नीचे उबलता है: मैं iCloud के माध्यम से इसे मैन्युअल रूप से किए बिना संघर्ष कैसे कर सकता हूं? चूंकि यह केवल परीक्षण उद्देश्यों के लिए है, इसलिए मुझे निजी एपीआई या सीधे सिस्टम में हैकिंग का उपयोग करके abput परवाह नहीं है - जब तक परिणाम NSFileVersion's +unresolvedConflictVersionsOfItemAtURL से एक संघर्ष की सूचना दी जाती है। किसी भी सलाह की अत्यधिक सराहना की जाएगी!

मैक्स

+0

कोई सार्वजनिक तरीका नहीं लगता है। मैंने अभी के लिए एक रडार दायर किया है: [rdar: // 12196293] (http://openradar.appspot.com/12196293)। किसी भी * हैक सुझाव * अभी भी सराहना की जाएगी। –

उत्तर

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 ] ; 
+0

धन्यवाद! यह एक दृष्टिकोण है जिसे मैंने पहले ही सोचा है। हालांकि, यह अभी भी सही तरीकों का कारण नहीं बनता है (यानी 'didGainVersion') कहलाता है, और वास्तव में एक संघर्ष नहीं होगा, केवल एक एपीआई के माध्यम से अनुकरण किया जाएगा। लेकिन अंत में यह काम हो सकता है (यानी ओसीएमॉक के माध्यम से नकली संस्करण वस्तुओं को जोड़कर)। –

+0

आपने कहा हैक है ठीक है :) सुनिश्चित नहीं है कि यह आपके परीक्षण उद्देश्यों के लिए पर्याप्त मजबूत है। ऐसा लगता है कि आपने थोड़ा और कोड लिखा है और/या एक अलग पेंट मशीन का उपयोग किया है, तो आप वास्तव में वास्तव में विरोधाभासी संस्करण बना सकते हैं? – nielsbot

+0

एक डीटीएस इंजीनियर ने मेरे ईमेल में से एक को जवाब दिया कि वर्तमान में केवल एकमात्र सार्वजनिक तरीके से एक से अधिक मशीन शामिल हैं। मैं एक वीएम का उपयोग कर सकता हूं, या सिर्फ इस हैक का उपयोग कर सकता हूं। धन्यवाद! –

संबंधित मुद्दे