0

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 を作成しましたが、テストでは実際には NO ですが、実行時に関数をテストすると、まったく同じ testField-array が使用されます。これは true です。

助けてくれてありがとう。

4

1 に答える 1

0

単体テストでは、実行する前に確認してください

  BOOL sum = [self.start tooManyCouplesForER:testField];

そのself.startはnilではありません。

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

単体テストで初期化されていないので、sumはゼロで、テストは失敗します。

于 2013-03-22T15:43:01.357 に答える