STAssertTrue没有像我期望的那样返回

时间:2013-03-22 15:36:15

标签: objective-c ocunit

我刚刚开始使用OCUnitTesting。我不认为我的代码是错误的,但问题可能是我在路上的某个地方犯了一个小错误..我有一个功能

- (BOOL)tooManyCouplesForER:(NSMutableArray *)startfield
{
    NSLog(@"Size %i", [startfield count]);
    if ([startfield count] > 7) {
        return true;
    } else{
        return false;
    }
}

在我的ViewController StartfieldTableViewController中。

我将UnitTests包含在我的项目中以及AppTests.h中我做了

#import "StartfieldTableViewController.h"

@property (strong, nonatomic) StartfieldTableViewController *start;

AppTests.m我写了一个测试

- (void)testTooManyCouplesForER
{
    NSMutableArray *testField = [[NSMutableArray alloc] initWithObjects:@"1", @"1", @"1", @"1", @"1", @"1", @"1", @"1", @"1", @"1", nil];
    BOOL sum = [self.start tooManyCouplesForER:testField];

    NSLog(@"BOOL = %@\n", (sum ? @"YES" : @"NO"));
    STAssertTrue(sum, @"This should have returned true, but it returned false");
}

所以我希望测试通过,因为我给它一个包含10个元素的数组。它失败。所以我创建了NSLog,它在测试中确实没有,但是在运行时测试函数,使用完全相同的testField-array,这是真的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在单元测试中,请在执行

之前进行检查
  BOOL sum = [self.start tooManyCouplesForER:testField];

self.start不是零。

  STAssertNotNil(self.start,@"You forgot to set the controller")
  BOOL sum = [self.start tooManyCouplesForER:testField];

我打赌它没有在单元测试中初始化,因此总和为零,测试失败。