Има ли някакъв удобен метод за изброяване и извикване на тестове на клас XCTestCase в Xcode?

Има клас, който предоставя набор от initXXX методи и някои функционални методи. Удобно е да извикате всички функционални тестове по време на изпълнение, когато проверявате екземпляра, създаден от всички тези initXXX методи.

Просто така:

-(void) testEverythingWithInitXXX {
   if ( test of self.tests not postfix by 'WithInit.*' ) {
      invoke it.
   }
}

Винаги е възможно чрез проверка на обекта ObjC по време на изпълнение, просто се чудя дали Apple е предоставила някаква помощ вече в рамката на XCTest?

-- актуализация --

Току-що намерих нещо.

NSArray * tests = [FileLibraryTests testInvocations];
for (NSInvocation * inv in tests ) {
    NSString * sel = NSStringFromSelector(inv.selector);
    if (![sel containsString:@"WithInit"]) {
        [inv invokeWithTarget:self];
    }
}

person pinxue    schedule 01.07.2015    source източник


Отговори (1)


Можете да опитате това (с помощта на време за изпълнение можете да извлечете всички методи от вашия клас)

    void DumpObjcMethods(Class clz) {

        unsigned int methodCount = 0;
        Method *methods = class_copyMethodList(clz, &methodCount);

        printf("Found %d methods on '%s'\n", methodCount, class_getName(clz));

        for (unsigned int i = 0; i < methodCount; i++) {
            Method method = methods[i];
        SEL customSelector = NSSelectorFromString([NSString stringWithFormat:@"%s", class_getName(clz)]);
         [self performSelector:customSelector withObject:nil];


            /**
             *  Or do whatever you need here...
             */
        }

    free(methods);
}

ако искате да изпълните само някакъв специален метод - проверете префикса чрез метода NSString

 if ([methodStringRepresentation hasPrefix:@"init"])
    {
        // perform selector
    }

Надявам се това да помогне

person Doro    schedule 01.07.2015
comment
Благодаря, но както споменах, опитвам се да избягвам този начин. - person pinxue; 01.07.2015