在单个Assert ...宏中执行多个语句?

时间:2010-12-20 08:45:52

标签: objective-c testing c-preprocessor

我想在STAssertXX系列宏中执行多个语句,这可能吗?类似的东西:

STAssertTrue([foo doSomething] && [barDoSomethingElse], @"Should…");

上面的代码适用于返回布尔值的方法,我想要类似void返回类型:

STAssertNoThrow({
    [foo doSomething];
    [bar doSomethingElse];
}, @"Should…");

当然,预处理器在这里抱怨。

2 个答案:

答案 0 :(得分:1)

由于任何有效的C代码也是有效的Objective-C;只要在括号中使用它,就可以使用C中的,运算符作为单个参数。

像这样:

NSAssertNoThrow(([foo doSomething], [bar doSomethingElse]), @"Whatever");

,运算符允许您将多个表达式组合为单个语句,返回最后一个表达式的值。

我会在STAssert…语句中使用强烈反对,因为您将丢失有关哪些测试失败的重要信息。

答案 1 :(得分:0)

好的,这是我到目前为止所得到的:

STAssertNoThrow(^{
    [foo doSomething];
    [bar doSomethingElse];
}(), @"Whatever");

但也许有一个更简单的解决方案?