是否有任何方便的方法可以在 Xcode 中枚举和调用 XCTestCase 类的测试?

Posted

技术标签:

【中文标题】是否有任何方便的方法可以在 Xcode 中枚举和调用 XCTestCase 类的测试?【英文标题】:Is there any handy method to enumerate and invoke tests of a XCTestCase class in Xcode? 【发布时间】:2015-07-01 06:19:09 【问题描述】:

有一个类提供了一组 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];
    

【问题讨论】:

【参考方案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
    

希望对你有帮助

【讨论】:

谢谢,但正如我所提到的,我正在尝试避免这种方式。

以上是关于是否有任何方便的方法可以在 Xcode 中枚举和调用 XCTestCase 类的测试?的主要内容,如果未能解决你的问题,请参考以下文章

Java:方法中的枚举参数

采用任何枚举的方法[重复]

是否有任何不是 RE-hard 的递归可枚举问题?

是否有任何重要的理由在开关案例中使用枚举的序数,而不是使用枚举?

我可以在 ios 9 和 Xcode 7 中部署我的应用程序的设备数量是不是有任何限制

如何在 Xcode 中运行单个测试用例?