测试异常时,XCode上的代码覆盖率不正确

dea*_*rne 6 xcode unit-testing code-coverage objective-c ios

我正在为iOS创建一个静态库,我正在尝试为它的单元测试获取代码覆盖率数据.我正在使用CoverStory来可视化生成的代码覆盖文件.

我得到了大多数测试的正确信息.

但是,任何验证应该抛出异常的测试都没有被标记为已测试.

例如,该方法

- (void)shouldThrow:(BOOL)throw {

    if (throw)
       @throw [NSException exception...];

    NSLog(@"not thrown");

}
Run Code Online (Sandbox Code Playgroud)

经测试测试

- (void)testShouldThrow {
    STAssertThrows( [myObject shouldThrow:YES], @"Should have thrown an exception");

    STAssertNoThrow( [myObject shouldThrow:NO], @"Should not have thrown an exception");
}
Run Code Online (Sandbox Code Playgroud)

通过所有测试(即正确抛出异常).但是,代码覆盖率不会显示为100% - 带有@throwon 的行未标记为已测试.

有任何想法吗?

wby*_*ung 3

带有 @throw 的行未完成(因为抛出了异常),因此它不会被标记为已覆盖。您可以提交错误,但这对他们来说可能很难修复。如果它是分支语句中的一行,则可能很难判断它是否经过测试,但如果它之前有执行过的行,则您只需假设它也是如此。

坏事是你永远无法达到 100%。