是否有任何方便的方法可以在 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 类的测试?的主要内容,如果未能解决你的问题,请参考以下文章
是否有任何重要的理由在开关案例中使用枚举的序数,而不是使用枚举?