在iOS上运行单元测试时,如何排除代码路径?

在iOS上运行单元测试时,如何排除代码路径?,ios,objective-c,unit-testing,ocunit,Ios,Objective C,Unit Testing,Ocunit,我有一些代码在ocunit中从逻辑测试运行时引发异常。我想忽略这段代码,测试其余的功能,而不必设置应用程序测试,也不必分解方法 例如: -(void)testMethod { BOOL result = NO; UIFont * font = [UIFont systemFontOfSize:12]; //throws exception in ocunit ... return result; } 在UIFont创建被排除的情况下,如何从单元测试调用此函数?将

我有一些代码在ocunit中从逻辑测试运行时引发异常。我想忽略这段代码,测试其余的功能,而不必设置应用程序测试,也不必分解方法

例如:

-(void)testMethod {
    BOOL result = NO;
    UIFont * font = [UIFont systemFontOfSize:12]; //throws exception in ocunit
    ...
    return result;
}

在UIFont创建被排除的情况下,如何从单元测试调用此函数?

将UIFont调用包装在if块中,并使用NSClassFromString动态加载SenTestCase类

例如:

-(void)testMethod {
    BOOL result = NO;
    if(!NSClassFromString(@"SenTestCase")) {
        UIFont * font = [UIFont systemFontOfSize:12]; //throws exception in ocunit
    }
    ...
    return result;
}

我想你做不到。为什么该方法在测试过程中会引发异常?我试图回答自己的问题只是为了记录我发现的变通方法,但结果证明我没有这样做的资质。那么,在你的问题中添加一个“编辑”部分。你可以回答你自己的问题,但是,这是一个变通方法。你应该把逻辑代码分离出来,只测试逻辑代码。”UIFont*font=[UIFont systemFontOfSize:12];'不是逻辑代码。在单元测试中,您可以创建设置字体的label和call方法,然后测试label statsertTrue(label.font.pointSize==12,@“blah”)。同意。这在很大程度上是一种黑客行为,不应该不加区别地使用。尽管如此,我仍然发现它在一个特定的例子中很有用,我想其他人也会这么做。